window.open是javascript函数,该函数的作用是打开一个新窗口或改变原窗口,如果你直接在js中调用window.open()去打开一个新窗口,浏览器会拦截。 (注意:window.open(url,'_self')在原窗口打开,不会被拦截)。
普通情况下window.open不会拦截,但若是在ajax的回调里面进行window.open,会拦截!因为浏览器会认为这是一个骚扰用户的行为。 在网上找到一些解决方案,总结如下。其中只有方案1、方案2个人验证过有效。其他未知orz...
// 先打开新页签
var tempWin = window.open("_blank"); // window.open("about:blank");
$.ajax({
type: "post",
url: xxx,
data: data,
contentType: "application/json;charset=UTF-8",
success: function (response) {
//给新页签设置跳转链接
tempWin.kk = "www.baidu.com";
}
});这种情况有个缺陷:
tempWin.kk = "www.baidu.com?id=xxxx";.
然后通过以下 getParam方法获取url参数:function getParam(a) {
var b = new RegExp("(^|&)" + a + "=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(b);
if (r != null) return unescape(r[2]);
return ""
}async:false——同步模式。$.ajax({
type: "post",
url: "/xxxx/xxxx",
async: false,// 设置同步(默认异步)
data: data,
contentType: "application/json;charset=UTF-8",
success: function (data) {
if(xxx){
window.open(url);
}
}
});异步当然有异步的好处,全部同步那就呵呵哒了,所以局部使用吧。
(接下来的方案,各自看看试试,不保证管用,只是搜集来mark下)
<a href="" target="_blank">click me</a>
# 点击这个超链接,浏览器会认为它是打开一个新的链接,就不会拦截。
<a href="javascript:void(0)" onclick="window.open()"></a>缺陷:有时候需要点击时候,进行一些其他设置或操作,再跳转。所以需要在js中完成。
使用 setTimeout 包装一下,也可以防止被浏览器拦截。注意这里的超时时间不能太短,否则也会被拦截。
setTimeout('window.open(url);', 500);创建一个form新元素,并赋予响应属性,然后手动代码进行submit();
注意:若需传递参数?id=1类似这种,需要指定POST方法。默认是GET方法,无法传递参数。
var form = document.createElement('form');
form.action = 'www.baidu.com?id=1';
form.target = '_blank';
form.method = 'POST';
document.body.appendChild(form);
form.submit();function newWin(url, id) {
var a = document.createElement('a');
a.setAttribute('href', url);
a.setAttribute('target', '_blank');
a.setAttribute('id', id);
// 防止反复添加
if(!document.getElementById(id)) {
document.body.appendChild(a);
}
a.click();
}