問題:ajax
前面開發項目時碰到一個問題,ajax 異步請求成功後須要新開窗口打開 url,使用的是 window.open() 方法,可是很惋惜被瀏覽器給攔截了,怎麼解決這個問題呢?
分析:json
瀏覽器之因此攔截新開窗口是由於該操做並非用戶主動觸發的,因此它認爲這是不安全的就攔截了(不過若是是 _self 的話就不會有這個限制),即便 ajax 回調函數中模擬執行 click 或者 submit 等用戶行爲(trigger('click')),瀏覽器也會認爲不是由用戶主動觸發的,所以不能被安全執行,因此被攔截。
解決方法:瀏覽器
一、異步改成同步,即:async:false安全
二、將新開窗口指向爲一個對象,而後修改對象的 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 請求,至少博主測試了下仍然被瀏覽器所攔截。async