safari-extension - 将消息从 safari 扩展弹出窗口发送到全局页面

标签 safari-extension browser-extension

我有一个需要与其全局页面通信的 Safari 扩展弹出框。从我正在使用的内容脚本

safari.self.tab.dispatchMessage(name,data); 

来实现这一点。从弹出窗口中我没有找到办法做到这一点。我知道我可以直接访问全局页面中的方法
safari.extension.globalPage.contentWindow

但我的目标是重用已经在内容脚本中使用的代码片段。我对插件的chrome版本做同样的事情。

是否有模拟的聪明代理的代码
safari.self.tab.dispatchMessage(name,data); 

从弹出窗口?

最佳答案

老实说,在弹出窗口和注入(inject)脚本中使用不同的代码可能更容易。如果你真的想要,你可以这样做:

function dispatchMessage(name, message) {
    if (safari.self.tab) {
        safari.self.tab.dispatchMessage(name, message);
    } else if (safari.extension.globalPage.contentWindow) {
        safari.extension.globalPage.contentWindow.handleMessage({name: name, message: message});
    }
}

然后只需使用 dispatchMessage('foo', 'bar')在您的弹出窗口和注入(inject)脚本中。虽然有点 hacky,因为 message 事件对象通常比 name 包含更多的信息。和 message ,并且您必须确保您的 handleMessage函数实际上与分配给 message 的函数相同。全局页面中的事件监听器。

关于safari-extension - 将消息从 safari 扩展弹出窗口发送到全局页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16529128/

相关文章:

swift - 导航到另一个 xib 时未在 AppKit(主)线程问题上运行

javascript - 为什么此代码没有从 Safari 获取 URL?

javascript - 如何在没有不安全的内联 JavaScript/CSS 代码的情况下使用 React?

javascript - 如何在kango框架中的背景和内容脚本之间传输对象

javascript - 如何在外部网站顶部显示 webapp 的标题栏?

c# - 使用 Selenium Webdriver 和 Safari

javascript - 找不到变量

javascript - 是否可以通过 Safari 扩展注入(inject)脚本而无需重新加载页面?

google-chrome-extension - Web Bluetooth API 获取附近所有可用设备的列表

google-chrome-extension - onUpdateAvailable 和 onInstall 事件。它们如何工作?