【问题标题】:Calling Swift from JavaScript从 JavaScript 调用 Swift
【发布时间】:2014-12-05 14:22:34
【问题描述】:

我是 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”。

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript ios swift uiviewcontroller


    【解决方案1】:

    我注意到你的方法userContentController是:

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

    应该是:

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

    (原型中没有选项!)。

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

    【讨论】:

    • 这么简单的事情非常感谢!!你也有教程的链接,展示了一些关于 javascript 到 swift 的好例子吗?
    • 你检查过这个tetontech.wordpress.com/2014/06/13/…吗?
    猜你喜欢
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 2019-01-07
    • 2018-07-18
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 2020-04-23
    相关资源
    最近更新 更多