簡體   English   中英

瀏覽器如何無法阻止彈出窗口?

[英]How can a browser be unable to block pop-ups?

我正在使用 firefox v84(最新的 atm),並且我還安裝了 ublock。 Firefox 在其設置中設置為阻止彈出窗口,但我仍然從某些站點獲得它們(盡管很少)。 它們在屏幕一角彈出非常小的 windows。 有時它顯示“firefox 阻止彈出窗口”,有時它不顯示。 我記得讀過關於 javascript 的詭計,以某種方式創建彈出窗口 windows,即使它在瀏覽器中被阻止(所以它仍然有可能)。

無論如何,我的主要問題是,瀏覽器如何無法阻止彈出窗口? I'm a programmer myself and i know that, for example, in windows environment, if you want to create a window, you need to call the windows api, and relevant functions (CreateWindowEx etc) to do that (even if you don'不要明確地這樣做,這就是幕后發生的事情)。 瀏覽器還負責讀取解析並執行 javascript 代碼。 所以只是簡單地不要調用 CreateWindow function,它應該很容易,不是嗎? 為什么這仍然是一個問題,為什么瀏覽器開發人員不能解決這個問題?

瀏覽器打開的彈出窗口可以(主要和基本上)有兩種類型:

  • window.open的顯式 javascript 調用
  • 與指定target的隱式鏈接(即: _blank

如果你只是簡單地阻止兩者,那么許多合法網站將不再工作,例如(但不限於)使用 OAuth 機制登錄時。

瀏覽器和插件可以檢測到一些模式和規則,以嘗試阻止非法彈出窗口。 示例:瀏覽器將自動阻止任何不是由用戶交互(單擊按鈕)直接觸發的window.open

人們開始了貓捉老鼠的游戲,人們試圖規避已知的限制並創造創造性的場景來迫使彈出窗口發生。 插件反過來會嘗試捕捉這些機制並提供更新的檢測行為,...

一種常見的技術確實是結合這兩種彈出方法並提供間接頁面瀏覽。 例子:

<a href="legit_page.html" target="_blank" onclick="location.href=other_page.html">

此代碼將打開一個合法的彈出窗口,並且一旦彈出窗口已經打開,合法頁面內的代碼將重定向到一個非法站點,同時將當前頁面導航到另一個合法頁面。

您會在大多數繼續有彈出窗口的網站上注意到這種行為。 它發生在用戶交互中(單擊鏈接或按鈕,...)並瀏覽到另一個頁面並同時打開彈出窗口。

在這種情況下,沒有准確的方法來檢測彈出窗口是否合法,除了手動異常和 URL 阻止列表,...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM