【问题标题】:JS calling a function in SwiftJS 在 Swift 中调用函数
【发布时间】:2019-11-11 22:26:17
【问题描述】:

我知道如何将消息从 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 中它是这样工作的

【问题讨论】:

  • 你有一个你使用的网址吗?从ios应用调用js?

标签: ios swift wkwebview wkwebviewconfiguration


【解决方案1】:

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()

这真的很简单直接。更多详情,请查看项目页面。

【讨论】:

    【解决方案2】:

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

    这是一个如何在 Javascript 中获取查询变量的示例:Get url parameter jquery Or 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']; 做同样的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多