Расширение Safari запускает внедренный JavaScript несколько раз

Я скопировал код из следующего примера на сайте Apple Developer.

https://developer.apple.com/library/content/documentation/Tools/Conceptual/SafariExtensionGuide/MessagesandProxies/MessagesandProxies.html

Когда я запускаю расширение, оно работает нормально, за исключением того, что внедренный скрипт запускается 3 раза, в результате чего выходные данные записываются в console.log 3 раза. Я также поместил предупреждение в функцию doBigCalc, и он открыл 3 предупреждения.

Почему это происходит / это должно произойти?

2 ответа

Решение

Вы не говорите со своей реализацией, но может быть, что ваш код не проблема. Ключ к пониманию того, что внедренный скрипт загружен.... Из документации по внедренному скрипту:

Скрипты внедряются в страницу верхнего уровня и любые дочерние элементы с источниками HTML, такими как iframes. Не думайте, что на вкладке браузера есть только один экземпляр вашего скрипта.

В документации упоминается, что вы можете отправлять сообщения, используя обработчики событий на трех разных уровнях:

safari.application.activeBrowserWindow.activeTab.addEventListener("message", waitForMessage, false);

safari.application.activeBrowserWindow.addEventListener("message", waitForMessage, false);

safari.application.addEventListener("message", waitForMessage, false);

Но вы должны выбрать один из трех. Вы не прикрепляете слушателей событий ко всем трем? Если да, то вы запустите его три раза точно.

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