JS打开链接被浏览器拦截解决方法

为了维护用户安全和使用体验,某些浏览器禁止直接使用JS中的window.open(url)打开新链接,一般window.open(url,“ _self”)更改当前窗口可以生效。
打开链接被浏览器拦截解决方案
使用以下变通方法可解决:

  1. 表单提交的方式
    1
    2
    3
    4
    5
    6
    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事件中
    1
    <a href="javascript:void(0)" onclick="window.open(url)"></a>
  3. 延迟这个打开操作
    1
    setTimeout('window.open(url);', 500); // 延迟时间不能太短 否则也会被拦截
  4. 通过JS打开新窗口会被拦截,换一种实现方式
    1
    2
    var tempwindow=window.open('_blank'); // 先打开页面
    tempwindow.location='http://www.baidu.com'; // 后更改页面地址