Summary

  • В новостном архиве Mozilla блокировка всплывающих окон упоминается в марте 2003 года; июньское объявление Mozilla 1.4 сообщает об улучшениях.
  • IE6 с Windows XP SP2 различал окно после клика пользователя и окно, запущенное одним скриптом. Современная инструкция для window.open() требует отдельного действия для каждого вызова.

Скрипт страницы просил новое окно; пользователь получал его на своём экране. Старые новости Mozilla показывают, как между этими событиями появился привратник. В марте 2003 года блокировка уже названа функцией браузера, в июне Mozilla 1.4 объявила её улучшения. Код мог стучаться, но решать, впускать ли гостя, начал браузер.

Первоначальное руководство Microsoft по внедрению IE6 с Windows XP Service Pack 2 описывает первый встроенный блокировщик Internet Explorer и информационную панель для задержанных действий. 6 августа 2004 года Microsoft сообщила о передаче SP2 производителям. Затем обновление распространялось дальше. Интересная часть конструкции уже была ясна: браузер смотрел на поступок человека перед появлением окна.

Microsoft объясняла работу IE6 SP2 через «инициирование пользователем». Если человек нажимал ссылку или элемент страницы, следующее окно обрабатывалось иначе, чем окно от самостоятельного скрипта. Заблокированное предложение попадало на информационную панель, где человек мог открыть его вручную. Странице разрешалось попросить; браузер сверял просьбу с недавним действием читателя.

В нынешней документации Mozilla по window.open() правило сформулировано практически: всплывающее окно должно следовать за прямым вводом пользователя, и для каждого вызова требуется отдельный жест. Если блокировщик отказал, функция может вернуть null. Страница способна увидеть этот ответ и предложить другой путь к содержимому. Дверь закрыта, но коридор не обязан заканчиваться стеной.

Действующий стандарт HTML называет след недавнего действия временной активацией. Её срок короток; некоторые функции расходуют её при использовании. Новое окно после расходования ждёт нового действия. Правило затрагивает и вложенные фреймы, не позволяя раздать один клик множеству iframe как пачку бесплатных приглашений. У действия есть время и предел применения.

Так у страниц появились правила приличия. Окно, связанное с нажатой кнопкой, могло пройти. Процессия, которую скрипт привёл по собственной инициативе, стояла у каната. window.open() по-прежнему умеет попросить комнату; браузер требует назвать пригласившего.