5

我知道如何将消息从 JS 发送到本机 IOS swift 应用程序:

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 中它是这样工作的

4

2 回答 2

3

WKWebView 仅支持原始消息传递接口。你必须为 JS 和 native 之间的复杂交互包装它。

我创建了一个名为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()

这真的很容易和直接。有关详细信息,请查看项目页面。

于 2015-06-24T10:22:51.820 回答
-1

您可以尝试使用 URL 查询变量,就像使用 Swift 连接到 PHP 一样。

以下是如何在 Javascript 中获取查询变量的示例:Get url parameter jquery 或 How to Get Query String Values In js

然后,当您运行 Javascript 时,您可以检查 URL 查询变量是什么,然后运行基于该变量的函数。

例如,我们使用command下面的变量,来说明要运行什么函数:

example.com?command=foo

然后在Javascript中做这样的事情:

if(command == 'foo') {
   runFoo();
}

然后,您还可以使用 URL 查询变量来指定函数的参数。

如果你选择 PHP

如果您选择使用 PHP,您可以使用$_GET['command'];.

于 2015-06-16T12:13:02.363 回答