ajax回调中使用window.open被拦截的终极解决方案

JavaScript/前端
273
0
0
2022-03-29
标签   Ajax

最近做一个购物项目,未登录时候跳转到登录界面登录,采用了window.open,最近才发现很几种浏览器都拦截了,需要点击放行才可以,我了个去,这对于有洁癖的码农来说是绝对不的。

被拦截的原因,百度了一下:在浏览器没有任何鼠标操作的时候,window.open会被当成广告被拦截,也就是你需要通过鼠标这类点击同步触发才可以,所以ajax这种异步回调时候打开窗口也会被拦截,解决办法,鼠标点击时候先打开窗口,回调时候再改变打开窗口的location即可,上代码:

var newOpenWindow; //先定义个全局新窗口
$.ajax({
            type: "post",
            url: "/api/xxx/",
            data: {
              ........
            },
            success: function (responseData) {
                var state = responseData.State;
                var msg = responseData.Msg;
                if (state == 1) {
                    //添加成功 
                    openMyShoppingCart(newOpenWindow);
                    return;
                }
                else {
                    if (msg == "notLogin") {
                        openLoginWin(newOpenWindow)
                    }
                    else
                    {
                        newWindow.close();
                        alert(msg);
                    }
                }
            }
        }
        );
    });

大家自己看代码,希望对大家有帮助。