从 JavaScript 调用 Swift

Posted

技术标签:

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

我是 Swift/ios 新手,一直在开发一个 代码的应用程序。在线教程并不多,其中很多都是 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】:

我注意到你的方法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/…吗?

以上是关于从 JavaScript 调用 Swift的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Javascript 调用 Dart 函数?

从本机iOS调用javascript函数

直接从 TypeScript 调用 JavaScript

如何从 javascript 调用 IBM Watson 服务

如何从 JavaScript 调用 C# 函数?

从 Java Applet 调用 Javascript 函数