我已经从 Apple Developer 网站上的以下示例中复制了代码。
当我运行扩展程序时,它运行正常,除了注入的脚本运行 3 次导致输出被写入 console.log 3 次。我还在 doBigCalc 函数中添加了一个警报,它打开了 3 个警报。
为什么会发生这种情况/它应该发生吗?
我已经从 Apple Developer 网站上的以下示例中复制了代码。
当我运行扩展程序时,它运行正常,除了注入的脚本运行 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);
但是您应该选择三者之一。您没有将事件侦听器附加到所有三个是吗?如果你是,你肯定会让它运行三遍。