欢迎光临
我们一直在努力

解决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'; // 后更改页面地址

5.简单的模拟按钮

function openurl(url) {
  //创建A标签
  var a = document.createElement('a');
  //给创建好的a标签赋值
  a.setAttribute('href', url);
  //设置css 隐藏属性
  a.setAttribute('style', 'display:none');  
  //设置 a标签为新窗口打开
  a.setAttribute('target', '_blank');  
  //将设置好的a标签,添加到 body 内
  document.body.appendChild(a);
  //模拟点击
  a.click();
  //移除a标签
  a.parentNode.removeChild(a);  
}
赞(0) 打赏
未经允许不得转载:程序开发爱好者 » 解决window.open被浏览器拦截的问题
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网站设计及开发、微应用及微网站开发、微信公众平台开发、 HTML5手机网站开发、网络整合营销、APP开发、软件开发及企业电商服务

联系我们