【问题标题】:callback javascript postMessage ios swift回调 javascript postMessage ios swift
【发布时间】:2020-10-25 17:17:16
【问题描述】:

请告诉我,有一个 ios 应用程序,它包含 WebKitView,其中有一个带有此代码的站点:

<div id="test" style="height: 40px; width: 100px; background-color: powderblue;">Hello</div>
<script type="text/javascript">
document.getElementById("test").addEventListener("click", function () {
   window.webkit.messageHandlers.test.postMessage("TEXT");
});
</script>

申请代码:

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://site")!
        webView.load(URLRequest(url: url))
        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))
    }

    
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        if message.name == "test", let messageBody = message.body as? String {
            print(messageBody)
        }
    }
}

xcode中点击div时,日志中显示如下错误

[general] Connection to daemon was invalidated

可能是什么问题? 对不起我的英语。

【问题讨论】:

  • 这个bug实际上与div点击无关。尝试在主视图上添加 webView 作为子视图。另外,为什么要加载两次 URL 请求?添加配置后执行,并在主线程中加载。
  • @ShashankMishra 你能修复我的代码吗?

标签: javascript ios swift xcode


【解决方案1】:

我已将主包中的共享 HTML 和 javascript 代码添加为“example.html”,并对您的代码进行了更改。它在我的最后工作正常。

override func viewDidLoad() {
        super.viewDidLoad()
        //Url from the html
        let url = URL(fileURLWithPath: Bundle.main.path(forResource: "example", ofType: "HTML") ?? "")
        
        // Configuring WKEWebview
        let config: WKWebViewConfiguration = WKWebViewConfiguration()
        config.userContentController.add(self, name: "test")
        webView = WKWebView(frame: self.view.frame, configuration: config)
        webView?.navigationDelegate = self
        
        //Constraints related changes
        webView.translatesAutoresizingMaskIntoConstraints = true
        webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]

        self.view.addSubview(self.webView)
        // Load file
        self.webView?.loadFileURL(url, allowingReadAccessTo: Bundle.main.bundleURL)
    }

您可以使用

加载您的网页
self.webView.load(URLRequest(url: "https://www.site"))

尝试一下,如果您遇到任何问题,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 2013-07-22
    相关资源
    最近更新 更多