濮阳杆衣贸易有限公司

主頁 > 知識庫 > Ajax請求響應中用window.open打開新窗口被攔截的解決方法

Ajax請求響應中用window.open打開新窗口被攔截的解決方法

熱門標簽:騰訊地圖標注位置能用多久 云呼外撥網絡電話系統(tǒng) 地圖標注項目怎么樣 ai機器人電銷資源 超級大富翁地圖標注 越南河內地圖標注 機器人電銷騙局揭秘 個人怎樣在百度地圖標注地名 硅語電話機器人公司

一、問題描述

ajax 異步請求成功后需要新開窗口打開 url,使用的是 window.open() 方法,但是會被瀏覽器給攔截了,需要用戶點下。

二、問題分析

  瀏覽器之所以攔截新開窗口是因為該操作并不是用戶主動觸發(fā)的,所以它認為這是不安全的就攔截了,即使 ajax 回調函數中模擬執(zhí)行 click 或者 submit 等用戶行為(trigger('click')),瀏覽器也會認為不是由用戶主動觸發(fā)的,因此不能被安全執(zhí)行,所以被攔截。

說明:

1、如果是在 a href="javascript:void(0)" onclick="fun()">/a> 這個中指定的 fun方法中調用 window.open()則不會被攔截,因為瀏覽器會認為是主動的。 但是在ajax請求的響應中打開窗口是會被攔截的。

2、如果不是打開新窗口,而是改原來的網頁地址,可以使用window.location = newurl 來實現,這樣不會被攔截。

三、解決方案

在ajax請求之前,先用window.open 打開一個空白窗口,然后在ajax的響應函數中設置該窗口的location屬性為新的url。

代碼示例如:

function fun(){
var tmpWin =window.open()
ajax(xxx, handle(){ 
//回調函數。這是偽代碼,語法不準。
var newurl = xxxx
tmpWin.location = newurl;
})
}

上面方法,存在一個問題時,因為先打開了空白窗口,如果ajax請求失?。ňW絡或業(yè)務邏輯問題)后, 新窗口中就不會有正常的結果體現,有可能造成用戶疑惑。
一個解決辦法是,當ajax出現問題時,可以考慮給出一個提示,如 tmpWin.document.write("服務器處理異常");

甚至為了防止ajax響應時間過長,當窗口新建后,立即給出提示 tmpWin.document.write("服務器正在處理中,請稍后");

后面如果ajax正常返回,則因為設置了location值,原來打印的信息會被新的頁面信息覆蓋。

這里還有一種方法,但也有缺陷:

因為ajax可以設置為同步請求,這樣可以在ajax請求之后,利用window.open打開新窗口。如:

function fun(){
var result;
ajax({ //需要設置同步請求
.....
result = xxx 
.......
}) 
if(result){
window.open(xxxx)
}
}

上面的做法,因為是對ajax請求的結果判斷后,才打開新窗口,避免了上面說的問題。
但是因為是同步請求,在我們測試中發(fā)現一個問題,如果服務器響應時間過長,一是界面會停頓(用戶體驗不好),二是新窗口會被攔截。

只有在服務器很快返回時才沒有問題。 我們測試時,在服務器代碼處理中sleep了1秒,發(fā)現新窗口就被攔截了。

四、小結

總結下,可以看出,對于在ajax返回后打開新窗口,沒有特別完美的方法。具體還是要根據自己系統(tǒng)的業(yè)務特點來采取相應的做法。

以上所述是小編給大家介紹的Ajax請求響應中用window.open打開新窗口被攔截的解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

您可能感興趣的文章:
  • Ajax請求成功后打開新窗口地址
  • ajax怎么打開新窗口具體如何實現
  • Ajax打開新窗口被瀏覽器攔截的兩種解決辦法

標簽:舟山 洛陽 林芝 遼源 邢臺 鄭州 內蒙古 海南

巨人網絡通訊聲明:本文標題《Ajax請求響應中用window.open打開新窗口被攔截的解決方法》,本文關鍵詞  Ajax,請求,響應,中用,window.open,;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Ajax請求響應中用window.open打開新窗口被攔截的解決方法》相關的同類信息!
  • 本頁收集關于Ajax請求響應中用window.open打開新窗口被攔截的解決方法的相關信息資訊供網民參考!
  • 推薦文章
    海南省| 茌平县| 贵港市| 东乌珠穆沁旗| 新津县| 措美县| 达孜县| 抚顺市| 古交市| 民丰县| 新乡县| 舒城县| 增城市| 元江| 樟树市| 大化| 湖口县| 呼玛县| 华安县| 玛曲县| 花莲市| 海伦市| 府谷县| 阿尔山市| 东阿县| 石嘴山市| 且末县| 南涧| 沧源| 北海市| 定陶县| 梁山县| 临清市| 马鞍山市| 诸城市| 久治县| 长岛县| 仲巴县| 武乡县| 蒙阴县| 金乡县|