问题描述
我正在尝试为我的本机应用程序创建 Safari Web 扩展。我想要一个带有按钮的弹出窗口,单击该按钮将与我的本机应用程序进行通信。在我开始这部分之前,我在发送本机消息并在符合 beginRequest
协议的类的 NSExtensionRequestHandling
函数中处理它时遇到问题。我没有做太多事情,因为我依赖于 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,但没有找到答案。
解决方法
在清单中,找到您的扩展程序的名称并将其用作 sendNativeMessage
函数的第一个参数。
如果您的分机名为 My Test Extension
,调用将如下所示:
browser.runtime.sendNativeMessage('My Test Extension',{ message: "Hello" });
我发现让检查更容易的一件事是将生成的代码中的 os_log
更改为 type: .error
并使用控制台应用程序 Applications > Utilities > Console
查看日志,因为它不会打印到 xcode 控制台。