Я скопировал код со следующего примера на сайте разработчиков Apple.
То, когда я выполняю расширение, оно обычно работает кроме введенного сценария, выполняется, 3 раза заставляя вывод быть записанным в console.log 3 раза. Я также поместил предупреждение в функцию doBigCalc, и она открыла 3 предупреждения.
То, почему это, происходить/, это предположило для случая?
Вы не разговариваете со своей реализацией, но может оказаться, что проблема не в вашем коде. Ключ в понимании того, что внедренный сценарий загружен .... Из документации по внедренным сценариям :
Сценарии внедряются на страницу верхнего уровня и в любые дочерние элементы с источниками HTML, такими как iframe. Не думайте, что для каждой вкладки браузера существует только один экземпляр вашего скрипта.
В документации упоминается, что вы можете отправлять сообщения с помощью обработчиков событий на трех разных уровнях:
safari.application.activeBrowserWindow.activeTab.addEventListener("message", waitForMessage, false);
safari.application.activeBrowserWindow.addEventListener("message", waitForMessage, false);
safari.application.addEventListener("message", waitForMessage, false);
Но вы должны выбрать один из трех. Вы не прикрепляете слушателей событий ко всем трем, не так ли? Если да, то наверняка трижды прогонят его.