多次运行注入javascript的Safari扩展

多次运行注入javascript的Safari扩展,javascript,safari,safari-extension,Javascript,Safari,Safari Extension,我在Apple开发者网站上复制了以下示例中的代码 当我运行扩展时,它正常运行,但注入的脚本运行了3次,导致输出写入console.log 3次。我还在doBigCalc函数中添加了一个警报,它打开了3个警报 为什么会发生这种情况/应该发生这种情况?文档中提到,您可以在三个不同级别上使用事件处理程序发送消息: safari.application.activeBrowserWindow.activeTab.addEventListener("message", waitForMessage, f

我在Apple开发者网站上复制了以下示例中的代码

当我运行扩展时,它正常运行,但注入的脚本运行了3次,导致输出写入console.log 3次。我还在doBigCalc函数中添加了一个警报,它打开了3个警报


为什么会发生这种情况/应该发生这种情况?

文档中提到,您可以在三个不同级别上使用事件处理程序发送消息:

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

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

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

但你们应该从三者中选择一个。您没有将事件侦听器连接到所有三个,是吗?如果是的话,您肯定会让它运行三次。

您不会对您的实现说话,但可能是您的代码不是问题所在。关键在于理解注入的脚本是加载的。。。。从:

脚本被注入顶层页面和任何具有HTML源(如iFrame)的子级。不要假设每个浏览器选项卡上只有一个脚本实例


我刚读过。我刚刚添加了if(window.top==window)并修复了它。