window.open() 被攔截后的分析


前言:
此文章僅是個人工作中遇到問題后的一些記錄和總結,可能毫無意義。。


事件回顧:

在開發中,PM要求在一個頁面中輸入多個鏈接然后可以一鍵在新窗口打開,所以就想到用window.open來實現,但是測試的時候發現會被攔截

 

分析:

關於window.open的用戶很多前輩都有寫過相關文章,就不在這里介紹了,查看window.open用法

針對不同的瀏覽器做了以下測試


1.用戶點擊事件內,觸發打開一個新窗口

用戶點擊事件觸發新窗口是例如:

obj.onclick=function(){

window.open(url);

}

通過用戶事件觸發的新窗口打開,這種形式打開新窗口瀏覽器會認為是用戶自己需要的,大多瀏覽器是不會攔截的

目前測試的幾個用戶事件,只有click和dbclick是瀏覽器不會攔截的

窗口攔截不只是跟瀏覽器內核有關,所以對原生IE和幾個常見IE內核的瀏覽器都有做測試

事件:click,dbclick

不攔截的瀏覽器有:Chrome,FF,IE 6.0-10.0,Safari,Opera,360瀏覽器

攔截:搜狗瀏覽器

事件:mouseover,mousemove,mouseout,scroll等等

不攔截:無

攔截:Chrome,FF,IE 6.0-10.0,Safari,Opera,360瀏覽器

2.用戶點擊事件內,觸發打開多個新窗口

點擊一次成功打開多個窗口的瀏覽器:FF,360瀏覽器,Safari

點擊一次打開第一個窗口,后面的窗口攔截的瀏覽器:Chrome,IE 6.0-10.0,Opera

3.Javascript自動觸發打開窗口

如:

setTimeout(function(){ window.open('http://www.baidu.com')},1000)

或者ajax請求成功后執行

$obj.click(function(){

$.ajax({

sucss:function(data){

if(data){

 window.open('http://www.baidu.com')

}

}

})

})

攔截的瀏覽器:測試的幾個瀏覽器都攔截

解決方案:

1.對於ajax返回后在打開新窗口,可以在用戶點擊后就打開一個空白窗口,然后再返回成功后給空白窗口一個url,這樣就不會被攔截了

$obj.click(function(){

var newTab=window.open('about:blank');

$.ajax({

sucss:function(data){

if(data){

 //window.open('http://www.baidu.com');

newTab.location.href="http://www.baidu.com";

}

}

})

})

2.腳本自行觸發打開的新窗口

看網上很多說新建a標簽,模擬點擊,經測試,無效,請大牛指導

 

 

 

 

 

 

 

 

 

 

 

 

 

問題:

前面開發項目時碰到一個問題,ajax 異步請求成功后需要新開窗口打開 url,使用的是 window.open() 方法,但是很可惜被瀏覽器給攔截了,怎么解決這個問題呢?
分析:

瀏覽器之所以攔截新開窗口是因為該操作並不是用戶主動觸發的,所以它認為這是不安全的就攔截了(不過如果是 _self 的話就不會有這個限制),即使 ajax 回調函數中模擬執行 click 或者 submit 等用戶行為(trigger('click')),瀏覽器也會認為不是由用戶主動觸發的,因此不能被安全執行,所以被攔截。
解決方法:

1、異步改為同步,即:async:false

2、將新開窗口指向為一個對象,然后修改對象的 url,比如:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$( '.task' ).bind( 'click' , function (){
var w = window.open();
$.ajax({
type: 'POST' ,
url: '/surveyTask' ,
dataType: 'json' ,
error: function (){
w.close();
},
success: function (res){
w.location = res.url;
}
});
});

最后需要說明的是:網上的動態添加 form 新開窗口的方法,並不適合 ajax 請求,至少博主測試了下仍然被瀏覽器所攔截。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM