浏览器拦截打开新窗口情况总结
生活随笔
收集整理的這篇文章主要介紹了
浏览器拦截打开新窗口情况总结
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在打開一個新窗口時,由于瀏覽器的安全機制,用戶未始終允許的情況下,可能會觸發(fā)到瀏覽器攔截,無法正常直接彈出。
網(wǎng)上有很多給出解決方案的只言片語,不夠全面,所以針對自己遇到的問題做了詳細的情況分析。總結成文,避免以后混淆。
只分析列舉使用 js 代碼手動打開新窗口的方式。
測試代碼用例在此
幾種打開新窗口的方式
調(diào)用情形分組結果
使用 Chrome(70)、Firefox(63)、Edge、IE(9-11) 作為測試瀏覽器,對以下列舉的打開新窗口的情形做測試。
x 表示被攔截,√ 表示新窗口正確打開
直接打開
即頁面加載后直接調(diào)用打開新窗口代碼
| window.open() | x | x | x | x |
| a.click() | x | x | x | x |
| form.submit() | x | x | x | x |
用戶點擊行為
按鈕點擊后直接打開
即在按鈕被點擊的回調(diào)中,直接調(diào)用打開新窗口的代碼
| window.open() | √ | √ | √ | √ |
| a.click() | √ | √ | √ | √ |
| form.submit() | √ | √ | √ | √ |
按鈕點擊后延時打開
即在按鈕被點擊的回調(diào)中,通過 setTimeout 執(zhí)行打開新窗口代碼
| window.open() | √ | √ | × | × |
| a.click() | √ | √ | × | × |
| form.submit() | √ | √ | × | × |
按鈕點擊后在異步請求回調(diào)中打開
即在按鈕被點擊的回調(diào)中,發(fā)送請求,并在請求的回調(diào)中執(zhí)行打開新窗口代碼
| window.open() | x | x | x | x |
| a.click() | x | x | x | x |
| form.submit() | x | x | x | x |
用戶鍵盤行為
我們以 input 元素進行測試(其他元素其他鍵盤事件也有相同效果),因為最可能使用的情況為 input 中使用回車打開新窗口。
input keydown后直接打開
| window.open() | √ | x | √ | x |
| a.click() | √ | x | √ | x |
| form.submit() | √ | x | √ | x |
其中 ie9、ie10雖然會彈出攔截彈窗提示,但是能打開新窗口
按鈕點擊后延時打開
| window.open() | √ | x | x | x |
| a.click() | √ | x | x | x |
| form.submit() | √ | x | x | x |
按鈕點擊后在異步請求回調(diào)中打開
| window.open() | x | x | x | x |
| a.click() | x | x | x | x |
| form.submit() | x | x | x | x |
規(guī)則總結
解決方案
總結
以上是生活随笔為你收集整理的浏览器拦截打开新窗口情况总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue2.0中的:is和is的区别
- 下一篇: 让 Chrome 崩溃的一行 CSS 代