Событие загрузки дочернего окна не работает в Firefox

При открытии пустого дочернего окна с помощью window.open('', 'name') его событие загрузки не работает в Firefox. В то время как в хроме это работает.

посмотрите мою демонстрацию stackblitz — в chrome вы можете увидеть сообщение журнала консоли, а в Firefox — нет.

Также readyState в Firefox не работает должным образом и не обновляется.

Что мне не хватает? как это решить?

Может быть блокировка всплывающих окон в firefox... проверьте настройки

sourav satyam 17.12.2020 11:17

@souravsatyam нет, блокировки нет, дочернее окно открыто, см. демо.

shemesh 17.12.2020 13:02

Для меня код открывает окно в Chrome и Mozilla как

sourav satyam 18.12.2020 08:52

@souravsatyam, пожалуйста, прочитайте мой вопрос еще раз, проблема в том, что «событие загрузки не работает в Firefox».

shemesh 20.12.2020 08:44

Эй, в вашем фактическом коде window.open, а не в этом примере кода, вы пытаетесь открыть страницу в том же домене, что и ваше приложение, или во внешнем домене? @shemesh

Josh Stevens 20.12.2020 09:24
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
253
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Проблема заключается в функции стрелки.

win.onload = () = > { } делает ссылку из window.onload на анонимную функцию. Функция не запускается. Это равно win.onload = function() {}, что тоже не сработает.

Что будет работать, так это создание новой функции

win.onload = new function() {
    console.info('--- new window loaded ---')
}

но это не привязка к событию onload

shemesh 22.12.2020 11:15
Ответ принят как подходящий

Согласно статье MDN , window.open возвращает экземпляр WindowProxy, который проксирует все свойства, содержащиеся в объекте Window, включая onload и addEventListener. Основная цель проксирования — ограничить вновь созданный window от несанкционированного доступа со стороны родителя window. Доступ контролируется браузером, который позволяет родительскому window взаимодействовать с дочерним экземпляром только в том случае, если обе эти вкладки соблюдают политику одинакового происхождения. Без этого правила безопасности любой может изменить или программно прочитать некоторую информацию, которая содержится на window любом другом сайте, непосредственно из своего кода.

На моей машине ваш репродукцию stackblitz не работает так, как вы ожидаете, даже в Chrome. Открытие нового Window с тем же источником устраняет проблему как в Chrome, так и в Firefox:

window.open('https://angular-child-window-load.stackblitz.io', 'kush', 'width=222, height=222, top=222, left=222');

Я думаю, что у вас могут быть изменены некоторые политики того же происхождения в конфигурации Chrome, или, может быть, есть другая локальная проблема.

я пытаюсь создать общий компонент, который открывает пустое (!) дочернее окно, а затем вставляет в него некоторые вещи. это означает, что дочернее окно не имеет URL-адреса. значит ли это, что я не могу подключиться к событию загрузки?

shemesh 22.12.2020 11:23

@shemesh Это означает, что в вашем случае у вас нет возможности получить доступ к дочернему окну из родительского. Родительское окно имеет какое-то происхождение, а дочернее окно не имеет того же происхождения, потому что отсутствие происхождения обрабатывается как другое происхождение. Таким образом, вы не можете подключиться ни к какому событию дочернего окна, и почти все данные дочернего окна нельзя даже прочитать из родительского. Я думаю, что вы можете сделать на своем сайте какую-то страницу с динамическим контентом и открыть новую вкладку с этой страницей, передав ей контент с родительской страницы.

arcquim 22.12.2020 19:07

Другие вопросы по теме