5

我已经从 Apple Developer 网站上的以下示例中复制了代码。

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

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

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

4

2 回答 2

6

您不谈论您的实现,但可能是您的代码不是问题。关键是了解已加载注入的脚本....来自注入的脚本文档

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

于 2010-07-07T11:02:58.797 回答
1

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

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

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

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

但是您应该选择三者之一。您没有将事件侦听器附加到所有三个是吗?如果你是,你肯定会让它运行三遍。

于 2010-07-06T22:58:17.417 回答