視窗被攔截的解決方法

BruceLeeup發表於2019-03-04

視窗被攔截的原因:通過window.open(url)的方式,開啟一個新的頁面,但是大部分瀏覽器會遭遇攔截。因為大部分現代的瀏覽器(泛指 Chrome / Firefox / IE 10+ / Safari)都預設開啟了阻止彈出視窗的策略,原因是 window.open 被廣告商濫用,嚴重影響使用者的使用。這個阻止彈出視窗的操作,並不是直接封殺 windw.open(),而是會根據使用者的行為來判斷這次 window.open() 是否屬於流氓操作。

window.open並不是所謂的會遭遇攔截,它攔截是有條件的,就是點選的時機跟你open的時間差,如果有時間差(有些瀏覽器允許一點點的時間差),瀏覽器才會認為不安全,就會攔截你。

解決辦法

方式一:使用jQuery模擬點選事件

jquery是提供了模擬click事件的方法的,$(selector).click()。只不過這裡我們要注意的是當要觸發a標籤點選的時候,<a>標籤內一定要有內容,並且要模擬裡面的內容被點選而不是<a></a>被點選。
$("span").click();複製程式碼

方式二:使用原生的js模擬點選事件

 document.getElementById("test2").click();複製程式碼

方式三:createEvent + initEvent + dispatchEvent

document.createEvent用於建立事件,在DOM Level 2 的事件中就有HTMLEvents,MouseEvents,UIEvents事件型別。

initEvent()方法用於初始化通過DocumentEvent介面建立的Event的值。

dispatchEvent則是觸發對應元素上面的某個事件。複製程式碼

方式四:後端重定向

這種方式需要後端協作,先提供一個介面地址,前端通過a標籤跳轉到該地址,後端通過運算之後,直接重定向到目標地址,這也是方便快捷的方法。複製程式碼

相關文章