gpt4 book ai didi

ios - 如何使用 WKScriptMessageHandler 捕获发送到父元素的 postmessage?

转载 作者:行者123 更新时间:2023-11-30 11:09:26 27 4
gpt4 key购买 nike

我正在 WKWebView 中加载一个 URL,该 URL 正在向父元素发送 postmessage:

window.parent.test.postMessage('A message')

我正在实现 WKScriptMessageHandler 并尝试使用 userController(didReceiveMessage) 获取该消息,但它从未被调用:

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
if(message.name == "test") {
print("JavaScript is sending a message \(message.body)")
}
}

我认为这是因为 postmessage 被发送到父元素,并且我直接加载 Web View 而不加载父元素(我无权访问父元素)。有什么方法可以捕获来自父级的消息而不在我的 WKWebView 上加载该父级?

最佳答案

在 JavaScript 中使用:

webkit.messageHandlers.yourCustomName.postMessage(...)

在 swift 内部:

webKitViewController = segue.destination as? CustomViewControllerWithWebView

if let userContentController = webKitViewController?.webView?.configuration.userContentController {
userContentController.add(self, name: "yourCustomName")

扩展 self :

extension MyController: WKScriptMessageHandler
{
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
print("received message:\n\(message.body)")
}
}

如果您无法编辑 javascript,请等待 webview 上的 didload 事件,并使用将覆盖测试 postMessage 函数的 javascipt 加载字符串。因此它将被重定向到您的 webkit 处理程序。

webView.evaluateJavascript("window.parent.test.postMessage = function(message) {
webkit.messageHandlers.yourCustomName.postMessage(message)}")

关于ios - 如何使用 WKScriptMessageHandler 捕获发送到父元素的 postmessage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52320650/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com