Swift Webview:如何从JavaScript正确调用Swift代码?

亚当

我试图使我的javascript与快速代码交互,但是不幸的是我没有成功。

目前,我只是尝试更改标题的颜色并显示一条消息,如下面的代码所示。

这是我的(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.
    }


}
内特·库克(Nate Cook)

您已正确设置了所有内容,但没有将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!
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从Swift代码调用resolveInstanceMethod

来自分类Dev

Swift:如何从Swift调用CCKeyDerivationPBKDF

来自分类Dev

从JavaScript调用Swift

来自分类Dev

在Swift代码中调用CFunctionPointer

来自分类Dev

如何从Swift调用C?

来自分类Dev

Swift如何使WebView更快加载

来自分类Dev

Flutter-如何在本机Swift代码中调用通道?

来自分类Dev

Swift /如何正确解雇rootViewController?

来自分类Dev

Swift:如何正确重用 ViewController

来自分类Dev

在 Swift 中使用 CLLocationManager 的正确代码设计

来自分类Dev

在NSNotificationCenter调用.removeObserver的正确位置= Swift deinit()?

来自分类Dev

Swift:UIButton调用不正确

来自分类Dev

换能器和swift移植javascript代码到swift代码

来自分类Dev

在WebView中加载HTML(并且Javascript源无法正确加载)-Swift

来自分类Dev

Swift语言:如何调用SecRandomCopyBytes

来自分类Dev

Swift 3.0:如何调用CGImageCreateWithImageInRect()?

来自分类Dev

Swift:如何调用NSSpeechRecognizer函数

来自分类Dev

如何从TypeScript调用Swift函数

来自分类Dev

Swift:如何调用NSSpeechRecognizer函数

来自分类Dev

无法在代码中调用segue(Swift)

来自分类Dev

在Swift代码中未调用CLLocationManagerDelegate方法

来自分类Dev

如何从Webview打开Safari View Controller(Swift)

来自分类Dev

Swift:如何调用调用随机函数的函数?

来自分类Dev

Swift WebView滚动空白

来自分类Dev

如何在对ObjC类的调用中正确使用简短的Swift闭包

来自分类Dev

使用UIWebview用JavaScript调用Swift函数

来自分类Dev

如何在Swift中找到正确的路径

来自分类Dev

如何在Swift中正确释放内存?

来自分类Dev

iOS Swift:如何正确缩小图像?

Related 相关文章

热门标签

归档