从JavaScript调用Swift

时间:2014-12-05 14:22:35

标签: javascript ios swift uiviewcontroller

我是Swift / iOS的新手,并且一直致力于从JavaScript调用Swift代码的应用程序。没有那么多的在线教程,其中很多都来自Swift还处于测试阶段。无论如何,我的代码出错,我无法编译它,我想知道在从JavaScript调用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(frame: self.view.frame, configuration: config)
        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.
    }
}

错误在class ViewController: UIViewController, WKScriptMessageHandler {上,并显示

  

键入' ViewController'不符合协议' WKScriptMessageHandler'。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

我注意到您的方法userContentController是:

func userContentController(userContentController: WKUserContentController!,
    didReceiveScriptMessage message: WKScriptMessage!)

它应该是:

func userContentController(userContentController: WKUserContentController,
    didReceiveScriptMessage message: WKScriptMessage)

(原型中没有选项!)。

如果您需要更多帮助,请发布您的index.html源文件