window.open被拦截的解决方法总汇
在 Chrome 的安全机制里,非用户直接触发的 window.open 方法,是会被拦截的。
这是由于浏览器为了维护用户安全和体验,禁止在JS中直接使用window.open(url)来打开新的链接(window.open(url,”_self”)改变当前的窗口是可以生效的)。下面采用几种变通方法解决:
1.表单提交的方式
var form = document.createElement('form');
form.action = 'www.baidu.com?id=1';
form.target = '_blank';
form.method = 'POST';
document.body.appendChild(form);
form.submit();这种方式,如果需要传递参数时,需要使用 POST 方法, 默认的 GET 方法无法传递参数。也就是新页面的url中没有参数部分。
另外,Ajax下载文件时也是用form 表单来模拟下载。
2.直接将打开窗口操作放在按钮/链接的onclick事件中
<a href="javascript:void(0)" onclick="window.open(url)"></a>3.延迟这个打开操作
setTimeout('window.open(url);', 500); // 延迟时间不能太短 否则也会被拦截4.通过JS打开新窗口会被拦截,换一种实现方式
var tempwindow=window.open('_blank'); // 先打开页面
tempwindow.location='http://www.baidu.com'; // 后更改页面地址本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!