最近做项目的时候遇到点击支付按钮后判断用户是否达到购买资格,达到的话就新建一个窗口打开新的链接,所以直接用window.location.href不行,会在当前页面打开支付链接页面,最佳选择是window.open,但是出于浏览器安全机制的考虑(或许还有其他,暂时没研究),凡事非用户触发的事件都会被浏览器拦截,而且window.open()在IE6-IE8下存在兼容性的问题,解决思路,判断浏览器类型,IE8以下创建a标签,模拟click事件后移除该元素,其他浏览器创建window.open()变量后再将window.location.href指向需要打开的链接,原理是打开一个新窗口再重定向当前页面的URL。
function openBankBillUrl() {
var url = goNewTabUrl;
var flag = $.support.leadingWhitespace;
if (!flag) { // IE8-
var referLink = document.createElement('a');
referLink.href=url;
referLink.target='_blank';
document.body.appendChild(referLink);
referLink.click();
referLink.remove();
}else { // other browser
var payPage = window.open();
payPage.location.href = url;
}
}
$(".btn").click(function() {
$.ajax({
url: ajaxUrl,
ansyc: false,
dataType: dataType
}).then({
if (/*满足支付的条件*/) {
openBankBillUrl();
}else {
// other code
}
});
});
由于完整的操作涉及到公司的业务代码,不方便分享,现在将整体的思路写出,记录一下这次的踩坑之旅(-)