몽촌토성 인터뷰

꿈꾸는 인터뷰 매거진

最近在做项目,需要异步获取服务器端返回的URL,然后在新的标签页中打开该URL(不要问我为什么不在当前页面加载,因为种种原因,用户不希望这个页面消失,只想在新标签页中处理工作,和我们的需求有很大关系)。然后发现各种问题,有的浏览器可以,但是有的浏览器被拦截,甚至有的浏览器既不被拦截又一点反应没有。

主要原因是,当 window.open 为用户触发事件内部或者加载时,不会被拦截,一旦将弹出代码移动到 ajax 或者一段异步代码内部,马上就出现被拦截的表现了,因为浏览器认为这是不安全的行为,默认都会被拦截。

在网上找了些资料,多多少少会有些问题,可能是我的姿势不对。

最后实现代码如下:

// open a new blank tab
var createNewInterviewTab = window.open('about:blank', '_blank');
$.ajax({
    // ...
}).done(function(result) {
    if (result.status == 0) {
        var url = result.data.redirect;
        // async open a new tab
        setTimeout(function() {
            createNewInterviewTab.location.href = url;
        }, 100);
    } else {
        // close the blank tab
        createNewInterviewTab.close();
    }
});

到这里就结束了,就酱。

参考