其实我的真实场景是
当用户打开模态弹出窗口(比如bootstrap模式弹出http://getbootstrap.com/javascript/#modals)时,我们需要打开一个已经由用户保存的URL。
因此,我试图用window.open打开。但这总是阻止我。有没有办法克服这个问题?
我尝试过以下方案。
当我尝试使用window.open(link, '_blank');
打开时,如果浏览器阻止了弹出窗口,那么我通过浏览器限制在新标签页中打开该网址。
为了解决这个问题,我尝试了(跟随)创建锚链接并触发click事件。但这也不起作用。
var link = document.createElement('a');
link.setAttribute('href', url);
link.target="_blank";
var event = document.createEvent('MouseEvents');
event.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
link.dispatchEvent(event);
通过此功能的某些网站。
例如, https://www.online.citibank.co.in/
当我点击登录按钮时,会打开一个新窗口。它们还具有与 window.open 相同的功能。但浏览器并没有阻止花旗银行的新窗口。
我不知道这背后的原因是什么。如何实现这一点 功能?
答案 0 :(得分:3)
不清楚在哪里/何时你正在触发尝试打开链接,并根据你使用JS的需要判断,我想这不是通过点击现有的按钮/链接。
我看到你的问题是:
即使你在JS / jQuery中创建一个锚链接,并以编程方式调用click()
(我刚试过) - 似乎浏览器/弹出窗口拦截器仍然将其视为一个弹出窗口(因为它是从代码完成,而不是“真正的”点击。
做一些挖掘,似乎无论如何都无法绕过这个。我在SO上的另一个答案中找到了这个引用:
“如果在处理用户事件(如点击)时使用,弹出窗口阻止程序通常只允许使用window.open” 来源:https://stackoverflow.com/a/9514875/6240567
无论如何,您可以使用jQuery在一行中创建一个元素click()
。
我的浏览器仍然将其检测为“弹出窗口”,因此请牢记这个警告
你可以这样做:
a
元素href
功能(前面有.click()
索引器 - TL; DR)模拟点击[0]
<强> jQuery的:强>
$('<a href="http://your.link.com" target="_blank"> </a>')[0].click();
或 Vanilla JS:
window.open("yourlink.com", "_target");
只需将其放在处理程序/方法中,以便在何时/何时点击“链接”。
希望这有帮助! :)