2014-09-29 153 views
2

這個問題已經在「如何檢查彈出窗口是否在我的瀏覽器上被阻止」和「我發現的所有解決方案都提出了一個新的彈出窗口打開測試。檢測阻止的彈出窗口而不打開彈出窗口

參考文獻:

  1. Detect blocked popup in Chrome

  2. How can I detect if a browser is blocking a popup?

我想知道是否有任何可能性知道阻止彈出窗口,實際上沒有打開一個。

由於許多原因,測試彈出可能需要一段時間才能關閉,這在應用程序的開始頁面上看起來很醜。

例如,如果我們可以使用來自客戶端的請求標頭中的任何內容,知道彈出窗口首選項等,就像我們可以獲得的語言首選項一樣。

這將是一個巨大的幫助。謝謝

+0

解決辦法 - 我已將彈出檢測測試代碼與Cookie關聯起來。因此,如果彈出窗口未被阻止,則測試每月執行一次。此外,我減少了窗口大小,使其儘可能不明顯。 – nexus 2014-10-14 11:02:38

回答

2

據我所知,彈出窗口阻止程序通過覆蓋window.open函數工作,並在大多數情況下返回null。因此,一種方法是檢測window.open是否仍然是nativ功能。

您可以使用toString方法測試該方法,該方法返回[native code]作爲該函數的主體。 toString在舊的IE中無法正常工作,所以不要使用''+來轉換函數。

var havePopupBlockers = ('' + window.open).indexOf('[native code]') === -1;

這不是靈丹妙藥,但是可以檢測到潛在的風險。我使用一些不同的彈出窗口攔截器和工程,在Chrome,FF,IE8和IE9上測試它。

+0

這是一個有趣的技術。感謝分享! – 2015-07-09 21:36:32

+0

什麼是本地代碼?我怎樣才能從瀏覽器中獲得? – 2017-03-07 11:51:15

+0

@HasmukhBaldaniya當你在字符串中轉換一些本地函數時,函數內容被表示爲'[native code]'。例如: '''+ window.open // return'function open(){[native code]}'' – Vlada 2017-03-08 15:56:38

相關問題