#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,…