美文网首页
window.open被浏览器拦截的处理方法

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

作者: BR | 来源:发表于2017-03-12 23:45 被阅读0次

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

          本文链接:https://www.haomeiwen.com/subject/ifnxnttx.html