当之前不知道 href 时,在新选项卡中重定向
Redirect in new tab when href is not known prior
我有一个链接和一个函数,当单击该链接时,它会侦听并触发。
问题是链接事先未知。因此,在此函数中,向服务器发出 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将在新选项卡中显示具有所需目标的新链接。
相关文章:
- 根据select选项元素将表单重定向到不同的URL
- 如何根据所选选项值重定向表单操作
- 如何重定向当前选项卡'Chrome扩展中的url
- 如何在新选项卡中打开链接以及在当前选项卡中重定向
- 对添加另一个选项卡的onsubmit函数停止重定向
- 在Jquery easyui中,多个选项卡提交按钮点击事件正在重定向到主页(第一个)选项卡
- 当用户在选择框中选择选项时,使用window.location.href重定向用户只会更改导航器中URL的最后一位
- 基于单选/选择选项重定向
- 根据选择选项元素将表单重定向到不同的URL,并在电子邮件中获取表单详细信息
- 重定向后选择选项
- Chrome扩展-重定向当前选项卡后重新运行扩展脚本
- 选择选项“重定向获取值”和“在重定向页面上显示”
- 单击外部链接后重定向,只打开一个选项卡/窗口
- Javascript表单提交打开新窗口选项卡,然后重定向父页面
- 页面重定向后,使用选定的选项文本更新下拉菜单文本
- 如何根据 html 中的选项/选择重定向用户(单击按钮后)
- 如何调整此代码,以便它将在新选项卡/窗口中打开重定向
- 最好有一个动态页面还是多个页面根据下拉选项重定向
- 根据单选按钮到'的选定选项重定向到页面;onclick',没有'提交'php中的表单
- 如何通过下拉选项重定向到提交时同一php文件中的不同动作