Расширение Safari запускает внедренный JavaScript несколько раз
Я скопировал код из следующего примера на сайте Apple Developer.
Когда я запускаю расширение, оно работает нормально, за исключением того, что внедренный скрипт запускается 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);
Но вы должны выбрать один из трех. Вы не прикрепляете слушателей событий ко всем трем? Если да, то вы запустите его три раза точно.