JS在Swift中调用函数

时间:2015-06-16 11:22:19

标签: ios swift wkwebview wkwebviewconfiguration

我知道如何从JS向本地IOS swift app发送消息:

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

        println("JavaScript is sending a message \(message.body)")

}

和JS:

webkit.messageHandlers.callbackHandler.postMessage("Hello from JavaScript");

我的问题:是否可以直接调用本机应用中的函数,而不是在我的示例代码中接收消息。

说我想在JS中使用类似的东西:

webkit.messageHandlers.someFunctionName()

我问的原因是在Android中它是如何工作的

2 个答案:

答案 0 :(得分:3)

WKWebView仅支持原始消息传递接口。你必须将它包装起来,以便在JS和本机之间进行复杂的交互。

我创建了一个名为XWebView的项目,该项目基于WKWebView的原始消息传递提供语言绑定样式API。它是用Swift编写的。

例如,您可以在Swift中编写插件:

class Plugin : NSObject {
    func someFunctionName() {
        doSomeThing()
    }
}

在加载HTML之前,将插件实例展示给JavaScript:

let webView = WKWebView(frame: frame, configuration: WKWebViewConfiguration())
webView.loadPlugin(Plugin(), namespace: "foo")

从JavaScript调用该函数:

window.foo.someFunctionName()

这非常容易和直截了当。有关详细信息,请查看项目页面。

答案 1 :(得分:0)

您可以尝试使用url parameters,就像使用swift

连接到PHP一样

以下是如何在javascript中获取网址参数的示例:Get url parameter jquery Or How to Get Query String Values In js

然后当您运行javascript时,您可以检查url parameters是什么,然后运行基于该功能的函数

像这样 网址是example.com 我们使用参数command来说明要运行的函数

example.com?command=foo

然后我们应该在javascript

中有这样的东西
if(command='foo'){
   //run function
   runFoo();
}

然后你也可以使用url参数将参数设置到函数

如果您选择PHP

如果您选择使用php,这与$_GET['command'];

相同