当之前不知道 href 时,在新选项卡中重定向

Redirect in new tab when href is not known prior

本文关键字:选项 重定向 新选项 不知道 href      更新时间:2023-09-26

我有一个链接和一个函数,当单击该链接时,它会侦听并触发。

问题是链接事先未知。因此,在此函数中,向服务器发出 ajax 请求以检索它。有一个严格的要求,链接只能在用户请求时才生成,并且不能事先生成。

然后,如何将新选项卡中的用户重定向到该链接?

改写

所以假设我有

<a href="unknown" target="_blank">My Link</a>

还有一个在单击时触发的事件处理程序。

我尝试了几种不同的方法。第一次

$('a[href="unknown"]').click(function(ev) {
 $.ajax({
      type: "GET",
      url: "/get_link", 
      context: document.body
    }).done(function(response) { 
      link = response.link
      //substitute href of a to the new link
  });
});

意识到这不起作用,因为 ajax 是异步的,因此用户将首先被重定向到未知。然后,当收到响应时,href 将被替换为正确的链接。

所以后来我尝试制作 ajax async:false,但这仍然不起作用,我不习惯锁定浏览器。

最后,我尝试抑制默认行为,然后打开一个新窗口(但我无法使用jquery打开新选项卡)。

$('a[href="unknown"]').click(function(ev) {
 ev.preventDefault();
 $.ajax({
      type: "GET",
      url: "/get_link", 
      context: document.body
    }).done(function(response) { 
      link = response.link
      //substitute href of a to the new link
      window.open(link)

  });
});
显然,在

谷歌搜索之后,您无法在jquery中打开新选项卡,因为它基于用户的浏览器设置。

然后,当用户单击链接(预先未知)时,如何在新选项卡中重定向用户,该链接会触发使用 ajax 请求检索链接的 javascript 函数?

您也可以在服务器端执行此操作 - 将用户发送到已知 URL,然后将他们 (HTTP 303) 重定向到正确的 URL。

你可以简单地使你的ajax同步:

$('a[href="unknown"]').click(function(ev) {
 $.ajax({
      type: "GET",
      url: "/get_link", 
      context: document.body,
      async: false
    }).done(function(response) { 
      link = response.link
      //substitute href of a to the new link
  });
});

似乎该设置已被弃用,我不确定替代方案应该是什么,但现在它可以工作。

理想的解决方案是使这个过程分为两步。我添加了一个按钮,单击时将执行ajax请求,获取所需的链接,然后使用一些javascript将在新选项卡中显示具有所需目标的新链接。