所以我从Apple Developer网站上的以下示例复制了代码。多次运行注入javascript的Safari扩展
当我运行的扩展,它除了注入脚本运行3次,导致要写入的输出CONSOLE.LOG 3次正常运行。我还在doBigCalc函数中发出警报,并打开了3个警报。
为什么发生这种情况/是否应该发生?
所以我从Apple Developer网站上的以下示例复制了代码。多次运行注入javascript的Safari扩展
当我运行的扩展,它除了注入脚本运行3次,导致要写入的输出CONSOLE.LOG 3次正常运行。我还在doBigCalc函数中发出警报,并打开了3个警报。
为什么发生这种情况/是否应该发生?
你不会说你的实现,但它可能是你的代码不是问题。关键是要了解注入的脚本已加载....从injected script documentation:
脚本被注入到顶级页面以及任何带有HTML源代码的子代,例如iframe。不要以为每个浏览器标签只有一个脚本实例。
说明文档中提到,你可以在三个不同层次使用的事件处理程序发送消息:
safari.application.activeBrowserWindow.activeTab.addEventListener("message", waitForMessage, false);
safari.application.activeBrowserWindow.addEventListener("message", waitForMessage, false);
safari.application.addEventListener("message", waitForMessage, false);
但你应该选择的三个之一。你没有将事件监听器添加到所有三个人中吗?如果你是,你会得到它运行三次肯定。
我刚才读到。我只是添加如果(window.top ===窗口),它修复它。 – 2010-07-07 16:44:43