加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift webview:如何从javascript正确调用swift代码?

发布时间:2020-12-14 05:36:25 所属栏目:百科 来源:网络整理
导读:我试图让我的 JavaScript与swift代码交互,但不幸的是我没有成功. 目前,我只是尝试更改标题颜色并显示一条消息,就像您将在下面的代码中看到的. 这是我的(index.html)代码: !DOCTYPE htmlhtml head titleTest/title meta charset="UTF-8" /head body h1WebVie
我试图让我的 JavaScript与swift代码交互,但不幸的是我没有成功.

目前,我只是尝试更改标题颜色并显示一条消息,就像您将在下面的代码中看到的.

这是我的(index.html)代码:

<!DOCTYPE html>
<html>
    <head>
        <title>Test</title>
        <meta charset="UTF-8">
    </head>
    <body>
        <h1>WebView Test</h1>
        <script type="text/javascript" src="main.js"></script>
    </body>
</html>

这是我的(main.js -JavaScript)代码:

function callNativeApp () {
    try {
        webkit.messageHandlers.callbackHandler.postMessage("Send from JavaScript");
    } catch(err) {
        console.log('error');
    }
}

setTimeout(function () {
    callNativeApp();
},5000);

function redHeader() {
    document.querySelector('h1').style.color = "red";
}

这是我的(ViewController.swift)代码:

import UIKit
import WebKit

class ViewController: UIViewController,WKScriptMessageHandler {

    @IBOutlet var containerView : UIView! = nil

    var webView: WKWebView?

    override func loadView() {
        super.loadView()

        var contentController = WKUserContentController();
        var userScript = WKUserScript(
            source: "redHeader()",injectionTime: WKUserScriptInjectionTime.AtDocumentEnd,forMainFrameOnly: true
        )
        contentController.addUserScript(userScript)
        contentController.addScriptMessageHandler(
            self,name: "callbackHandler"
        )

        var config = WKWebViewConfiguration()
        config.userContentController = contentController

        self.webView = WKWebView()
        self.view = self.webView!
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view,typically from a nib.
        var url = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("index",ofType: "html")!)
        var req = NSURLRequest(URL: url)
        self.webView!.loadRequest(req)
    }

    func userContentController(userContentController: WKUserContentController!,didReceiveScriptMessage message: WKScriptMessage!) {
            if(message.name == "callbackHandler") {
            println("JavaScript is sending a message (message.body)")
            } }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}
您正确设置了所有设置,但是您没有将WKWebViewConfiguration实例提供给WKWebView.由于配置有Javascript / Swift桥梁的细节,您不能来回说话.
override func loadView() {
    // ...
    var config = WKWebViewConfiguration()
    config.userContentController = contentController

    self.webView = WKWebView(frame: self.view.frame,configuration: config)
    self.view = self.webView!
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读