window.open被浏览器拦截的处理方法

最近做项目的时候遇到点击支付按钮后判断用户是否达到购买资格,达到的话就新建一个窗口打开新的链接,所以直接用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
        }
    });
});

由于完整的操作涉及到公司的业务代码,不方便分享,现在将整体的思路写出,记录一下这次的踩坑之旅(-)

你可能感兴趣的:(window.open被浏览器拦截的处理方法)