瀏覽器攔截新視窗問題總結
一般情況下,對於使用者正常操作手動觸發的a標籤、window.open、form表單提交等方式開啟新視窗時是不會被瀏覽器攔截的,可以正常的開啟。但是由於業務需求當我們需要在非同步的程式中去開啟新視窗時,由於瀏覽器的安全機制,使用者未始終允許的情況下,可能會觸發到瀏覽器攔截,無法正常直接彈出。
幾種開啟新視窗的方式
1.window.
open()
2.建立a標籤target=_blank,手動觸發a.
click()
3.建立form表單,手動觸發form.
submit
()
解決方法
1,我們可以在非同步程式呼叫之前先開啟乙個新視窗,並指定視窗名稱
window.
open
("about:blank"
,'windowname');
$.ajax()
;
2,在非同步程式中處理建立a標籤,並將a標籤的target屬性指向新視窗的名稱windowname。form表單方式同理。
window.
open
("about:blank"
,'windowname');
$.ajax(}
);
優化方案
問題1:由於上述方法中開啟的是乙個空白頁面,對使用者很不友好,所以我們可以在專案中新增乙個loading頁面,然後開啟它。
問題2:由於上述新視窗名稱寫了乙個固定的值,會導致開啟新視窗後新視窗沒有關閉時,再次開啟新視窗時就會繼續指向相同名稱的視窗,而不是繼續開啟新視窗,所以建議在視窗名稱上新增時間戳。
假設過度頁面的路由為:/loading,那麼:
let windowname =
'windowname'
+new
date()
.gettime()
;window.
open
("/loading"
, windowname);$.
ajax(}
);
現在新開視窗時就會開啟loading頁面,表現乙個友好的過度效果,等非同步程式處理完後就會指向對應的頁面。 ajax開啟新視窗被瀏覽器攔截的解決辦法
先開始開啟乙個空的新視窗,然後改變新視窗的url,具體 為 var wd window.open ajax success function data else error function data 這種實現方式有個弊端,就是不管ajax有沒有成功,都會執行 var wd window.open ...
Ajax 請求後開啟新視窗被攔截的解決方案
公司業務上有個場景,需請求後台獲取支付鏈結位址,再開啟位址引導使用者購買。這樣的場景在其他企業應該也很場景。但是遇到個很常見的問題,ajax後直接用window.open url 會被瀏覽器作為廣告攔截。解決方案 方案一,在ajax請求前新開預設視窗 let win window.open blan...
瀏覽器快取的解決方案
瀏覽器快取的解決方案 摘要 瀏覽器快取的解決方案,包括傳統前端和現代前端。前言 本文只針對檔案請求 html css js 進行分析,但不涉及json資料請求。1 當瀏覽器向伺服器發起請求,如果請求正常,狀態是200。2 瀏覽器接收到請求結果後,如果會根據響應頭設定的快取規則,把請求結果存起來。3 ...