Как браузер может не блокировать всплывающие окна?

#javascript

#javascript

Вопрос:

Я использую firefox v84 (последняя версия atm), и у меня также установлен ublock. Firefox настроен на блокировку всплывающих окон в своих настройках, но я все равно получаю их (хотя и редко) с некоторых сайтов. Они появляются в виде очень маленьких окон в углу экрана. Иногда он показывает «firefox заблокировал всплывающее окно», иногда нет. Я помню, как читал о хитрости javascript, чтобы каким-то образом создавать всплывающие окна, даже если они заблокированы в браузере (так что каким-то образом это все еще возможно).

В любом случае, мой главный вопрос: как браузер может не блокировать всплывающие окна? Я сам программист, и я знаю, что, например, в среде Windows, если вы хотите создать окно, вам нужно вызвать Windows api и соответствующие функции (CreateWindowEx и т. Д.), Чтобы сделать это (даже если вы не делаете это явно, это то, что происходит под капотом). Браузер также отвечает за чтение, синтаксический анализ и выполнение кода javascript. Так что просто НЕ вызывайте функцию CreateWindow, это должно быть так просто, не так ли? Почему это все еще проблема, и почему разработчики браузеров не могут решить эту проблему?

Комментарии:

1. Когда вы захотите открыть всплывающее окно (многие веб-сайты используют window.open его законно), CreateWindow там должен быть код для вызова функции. Сложная проблема заключается в том, чтобы выяснить, какие вызовы являются законными (ожидаемыми пользователем), а какие нет.

2. Кроме того, вы УВЕРЕНЫ, что это всплывающее окно, а не просто плавающий div или плавающий iFrame с высоким zIndex?

Ответ №1:

Всплывающие окна, открываемые браузером, могут (в основном и в основном) быть 2 типов :

  • Явный вызов javascript для window.open
  • Неявная ссылка с target указанным (т.е.: _blank )

Если вы просто заблокируете оба, то многие законные веб-сайты больше не будут работать, например (но не ограничиваясь этим) при использовании механизма OAuth для входа в систему.

Существуют некоторые шаблоны и правила, которые могут быть обнаружены браузером и плагинами для попытки блокировки незаконных всплывающих окон. Пример: браузер автоматически заблокирует все window.open , что не вызвано прямым взаимодействием с пользователем (нажатием на кнопку).

Начинается игра в кошки-мышки с людьми, пытающимися обойти известные ограничения и создать изобретательные сценарии, чтобы заставить всплывающее окно произойти. Плагины, в свою очередь, попытаются перехватить эти механизмы и предоставить обновленное поведение обнаружения,…

Одним из распространенных методов действительно является объединение 2 методов всплывающих окон и обеспечение непрямого просмотра страниц. Пример :

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

Этот код откроет законное всплывающее окно, а код внутри законной страницы затем перенаправит на нелегальный сайт, как только всплывающее окно уже открыто, в то же время переходя с текущей страницы на другую законную страницу.

Вы заметите такое поведение на большинстве сайтов, на которых продолжают появляться всплывающие окна. Это происходит при взаимодействии с пользователем (нажмите на ссылку или кнопку, …) и перейдите на другую страницу и одновременно откройте всплывающее окно.

Нет точного способа определить, является ли всплывающее окно законным в этом случае, за исключением исключений вручную и списков блокировки URL,…