浏览器为了维护用户安全和体验,禁止在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;
};