2010-07-06 24 views
3

所以我从Apple Developer网站上的以下示例复制了代码。多次运行注入javascript的Safari扩展

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源代码的子代,例如iframe。不要以为每个浏览器标签只有一个脚本实例。

+3

我刚才读到。我只是添加如果(window.top ===窗口),它修复它。 – 2010-07-07 16:44:43

1

说明文档中提到,你可以在三个不同层次使用的事件处理程序发送消息:

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

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

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

但你应该选择的三个之一。你没有将事件监听器添加到所有三个人中吗?如果你是,你会得到它运行三次肯定。