目前遇到一个问题,有一个超链接a
,点一下打开一个新页面(注意是新页面,不是从本页面打开,而且不要浏览器进行组织弹窗),把要跳往的链接写在一个隐藏的a
中,模拟点击这个隐藏的超链接,分别用了以下方法:
html的代码如下:
<a id="blank" >点我跳转</a>
<a style="display:none;" id="blank1" href="http://sf.gg" target="_blank">我是隐藏的那个超链接</a>
以下是用过的四种方法:
1. window.open() // 妥妥的,浏览器阻止弹窗
代码:$('#blank').on('click', function (e) {
e.preventDefault();
window.open('http://sf.gg', '_blank');
});
2. $('a').get(0).click(); // 同上,阻止弹窗
代码:$('#blank').on('click', function (e) {
e.preventDefault();
$('#blank1').get(0).click();
});
3. $('a').trigger('click'); // 同上,阻止弹窗
代码:$('#blank').on('click', function (e) {
e.preventDefault();
$('#blank1').trigger('click');
});
4. 写一个方法,
代码:targetLink() {
// 获得隐藏的a超链接
var oHideA = document.getElementById('a');
oHideA.click();
}
<a onclick="targetLink(); ">点我打开新页面</a> // 成功,没有阻止弹窗
我的问题:
1.为什么第4个能成功呢?
2.不是不建议在标签里写js吗?
3.是否还有更好的办法来躲开阻止弹窗?
高洛峰2017-04-10 14:46:10
你试试window.open(href, '_blank')
,应该可以避免弹窗。
Demo
http://jsfiddle.net/3ar6roqx/
http://jsfiddle.net/uyx3q5ya/
关于Window.open
,MDN上这样写:
To open a new window on every call of window.open(), use the special value _blank for strWindowName.
https://developer.mozilla.org/en-US/docs/Web/API/Window.open
黄舟2017-04-10 14:46:10
晕,懒得解释了都,你把jQuery的click()
和原生的click()
函数搞混啦,只有原生的click()
是点击链接打开的。第二个方法你写成$("#click1")[0].click()
就可以生效啦,第三个和第二个实际上是一样的。