2010-07-06 1 views
3

Итак, я скопировал код из следующего примера на сайте Apple Developer.Расширение Safari запустило javascript несколько раз

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

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

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

ответ

5

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

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

+3

Я только что прочитал это. Я просто добавил if (window.top === window), и он исправил его. –

1

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

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

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

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

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

Смежные вопросы