【发布时间】:2021-02-03 21:38:47
【问题描述】:
我正在尝试为我的原生应用程序创建一个 Safari Web 扩展。我想要一个带有按钮的弹出窗口,单击该按钮将与我的本机应用程序进行通信。在我进入这部分之前,我在发送本机消息并在符合NSExtensionRequestHandling 协议的类的beginRequest 函数中处理它时遇到问题。我没有做太多,因为我依赖于 Xcode 生成的代码。
在manifest.json 我添加了nativeMessaging 这样的权限:
"permissions": [ "nativeMessaging" ]
popup.js 包含事件监听器:
console.log("Hello World!", browser);
document.addEventListener('DOMContentLoaded', function() {
var checkPageButton = document.getElementById('clickIt');
checkPageButton.addEventListener('click', function() {
console.log("click")
browser.runtime.sendNativeMessage({ message: "Hello" });
}, false)
}, false)
当我检查弹出元素时,我可以看到 Hello World 和 click 消息,但正如我之前提到的 - beginRequest 未被调用。有什么遗漏吗?
我还从 WWDC20 观看了 Meet Safari Web Extensions session 但我没有找到答案。
【问题讨论】:
-
我也遇到了同样的问题。你有想过吗?我观看了确切的会议。在我的“权限”数组中有“nativeMessaging”。本机处理程序永远不会被调用。如果你想通了,你介意分享作为答案吗?
-
如果我没记错的话我没弄明白
-
对于它的工作原理,我认为你不能从 popup.js 或 content.js 调用
sendNativeMessage,我相信你只能从 background.js 调用它。如果您查看您的 safari 开发菜单,检查员您可能还会看到类似 undefined is not a function (sendNativeMessage) 的内容,查看您的控制台 -> 错误和故障(按捆绑 ID 过滤)并查看是否有任何类型的权限问题。
标签: javascript safari-extension safari-web-extension safariservices