首页 > 解决方案 > WKScriptMessageHandler 不起作用 ios swift xcode

问题描述

请告诉我,有没有这样的代码。当 webview 加载时,页面发送 postMessage。由于某种原因,打印不起作用。

ViewController.swift:

import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate, WKScriptMessageHandler {
    
    var webView: WKWebView!
    
    override func loadView() {
        webView = WKWebView()
        webView.navigationDelegate = self
        view = webView
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        let url = URL(string: "https://web.site/")!
        webView.load(URLRequest(url: url))
        let config = WKWebViewConfiguration()
        let userContentController = WKUserContentController()
        userContentController.add(self, name: "test")
        config.userContentController = userContentController
    }
    
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        if message.name == "test", let messageBody = message.body as? String {
            print(messageBody)
        }
    }
}

索引.html:

<script>
    function printHelloWorld() {
        window.webkit.messageHandlers.test.postMessage("Hello, world!");
    }
    window.onload = printHelloWorld;
</script>

请告诉我可能是什么问题?

标签: iosswiftxcode

解决方案


试试这个配置:

    func setupWebView() {
        let config: WKWebViewConfiguration = WKWebViewConfiguration()
        config.userContentController.add(self, name: "test")
        
        webView = WKWebView(frame: self.view.frame, configuration: config)
        webView?.navigationDelegate = self

        self.webView?.load(URLRequest(url:url))
    }

还要检查 Webkit 是否正确发送消息并使用与 iOS 相同的消息处理程序名称。


推荐阅读