Расширение Safari запускает внедренный JavaScript несколько раз - PullRequest
4 голосов
/ 07 июля 2010

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

https://developer.apple.com/library/content/documentation/Tools/Conceptual/SafariExtensionGuide/MessagesandProxies/MessagesandProxies.html#//apple_ref/doc/uid/TP40009977-CH14-SW1

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

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

Ответы [ 2 ]

6 голосов
/ 07 июля 2010

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

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

1 голос
/ 07 июля 2010

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

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

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

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

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

...