明天的明天 永远的永远 未知的一切 我与你一起承担 ??

是非成败转头空 青山依旧在 几度夕阳红 。。。
  博客园  :: 首页  :: 管理

window.open(url)打开链接被浏览器拦截解决方案

Posted on 2021-01-26 14:47  且行且思  阅读(1501)  评论(0编辑  收藏  举报

浏览器为了维护用户安全和体验,禁止在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'; // 后更改页面地址


var newTab = window.open('about:blank', "_blank", "Height=500,Width=900,Left=" + iLeft + "px,Top=" + iTop + ",status=no,help=no,scrollbars=yes");;
newTab.location.href = 'CostDetail/InvAmoutSplit?__tick=' + data;
        

5.模拟用户点击a标签的操作来实现 ,推荐这种:

//新窗口打开网页
function openWin(url) {
    try {
        var el1 = document.createElement('a');
        el1.setAttribute("target", "_blank");
        el1.setAttribute("id", "openWin");
        el1.setAttribute("href", url);
        document.body.appendChild(el1);
        document.getElementById("openWin").click();//点击事件
        document.body.removeChild(el1);
    }
    catch (e) {
        window.open(url);
    }
}

首先创建了个A标签,然后将url赋值给a标签,将设置好的a标签添加到Body中,js调用a标签的click事件。

6.模拟用户点击a标签的操作来实现 :

<a href="javascript:void(0)" id="openwin_screenshot" name="openwin_screenshot" target="_blank"></a>
$("#openwin_screenshot").attr("href", url);
document.getElementById("openwin_screenshot").click();//点击事件



//window.open新页,模拟模式弹窗
/*
1、直接设置父窗口的DOM对象的值:window.opener.document.getElementById(“parentWindowControlId”).value = "test";
2、id:"id",name:"name";  window.opener.DoAfterXXX(obj);  父窗口提供一个DoAfterXXX的函数就可以了。
*/
function openDialog(url, iWidth, iHeight) {
        var iTop = (window.screen.availHeight - 30 - iHeight) / 2;
        var iLeft = (window.screen.availWidth - 10 - iWidth) / 2;
        var win = window.open(url, "弹出窗口", "width=" + iWidth + ", height=" + iHeight + ",top=" + iTop + ",left=" + iLeft + ",resizable=no,location=no, status=no,alwaysRaised=yes,depended=yes");

}
window.openex = function (url, w, h) {

    var width = isNaN(parseInt(w)) ? 800 : parseInt(w);
    var height = isNaN(parseInt(h)) ? 600 : parseInt(h);

    var iTop = (window.screen.height - height) / 2;
    var iLeft = (window.screen.width - width) / 2;

    returnData = window.open(url, "_blank", "Height=" + height + ",Width=" + width + ",Left=" + iLeft + "px,Top=" + iTop + ",status=no,help=no,scrollbars=yes");

    return false;
};