SFSafariApplication.dispatchMessage

问题描述 投票:0回答:1

我们正在为 MacOS 制作 Safari 扩展,它使用 SFSafariApplication.dispatchMessage() 在扩展的本机部分和 javascript 部分之间进行通信。直到最近一切正常,但是更新到 xcode 16 后我开始收到此错误:

'dispatchMessage(withName:toExtensionWithIdentifier:userInfo:completionHandler:)' is unavailable in application extensions for macOS: Not available to extensions
'dispatchMessage(withName:toExtensionWithIdentifier:userInfo:completionHandler:)' has been explicitly marked unavailable here (SafariServices.SFSafariApplication)

我查看了文档,但是没有发现任何关于dispatchMessage()被其他东西取代的提示。根据https://developer.apple.com/documentation/safariservices/messaging- Between-the-app-and-javascript-in-a-safari-web-extension这是应该进行通信的方式。

这是一个错误吗?或者有人可以指导我使用其他沟通方式吗?

macos safari
1个回答
0
投票

看起来

dispatchMessage()
不应该这样使用。扩展的本机部分应该只回复来自 javacript 部分的消息,但不发起通信。响应应该通过扩展处理程序的
NSExtensionContext
方法获取
beginRequest(with context: NSExtensionContext)
来完成。

据我发现,没有必要立即回复收到的消息。您可以存储

NSExtensionContext
,并在稍后响应准备好时将其用于响应。扩展的 Javascript 部分将在
browser.runtime.sendNativeMessage()
中设置的回调中接收响应。这样我就解决了我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.