【问题标题】:iOS Expose Custom API to WKWebViewiOS 向 WKWebView 公开自定义 API
【发布时间】:2020-01-16 13:25:25
【问题描述】:

在 Android 上,我使用 addJavascriptInterface 方法向我在 WebView 中加载的网页公开自定义 API。

iOS WKWebView 有类似的替代方案吗?

我遇到了evaluateJavaScript,它允许我运行 JavaScript 以将我的 API 添加到全局范围,但我无法找到一种添加与我的应用程序通信的代码的方法。

【问题讨论】:

  • 据我了解,您正试图让 javascript 与 Webview 进行通信。我试着做和你一样的事情,它在 Android 上工作,但在 IOS 上没有。有一种方法可以让他们交流,但它只有一个功能。有一篇大文章解释的很好medium.com/@JillevdWeerd/…
  • @GilbertGabriel 谢谢,这看起来像我需要的东西
  • 没问题!我写了一个答案,所以如果文章满足需求,请随时接受,否则告诉我!

标签: ios wkwebview


【解决方案1】:

这是可能的。您可能正在寻找WKScriptMessageHandler。为 Web 视图创建自定义配置。例如在您的视图控制器的viewDidLoad

let configuration = WKWebViewConfiguration()

使用配置注册脚本消息处理程序。例如一个视图控制器,它在viewDidLoad 上创建WKWebView。然后视图控制器需要符合WKScriptMessageHandler

configuration.userContentController.add(self, name: "helloworld")

使用自定义配置以编程方式创建 Web 视图。

webView = WKWebView(frame: view.frame, configuration: configuration)

从 JavaScript 调用 WebKit 消息处理程序。消息处理程序可用作全局 window.webkit.messageHandlers 对象中的属性。属性使用上面调用WKUserContentController.add(_:name:)时使用的名称。

window.webkit.messageHandlers.helloworld.postMessage("Hi!");

处理来自 JavaScript 上下文的调用。

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
    print(message.body as! String)
}

免责声明:我将这段代码 sn-ps 从my own answer 复制并简化为更高级别的问题,其解决方案包括这些步骤。

【讨论】:

    【解决方案2】:

    可以从 WKWebview 与代码进行通信,但只能使用一个函数,这很难做到,但如果你管理好所有事情,你可以得出好的结果。我会让这篇文章解释它,因为这是一个非常复杂的过程,他们会比我做得更好。

    Creating links between WKWebView and native code

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-03
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      • 2013-10-28
      • 2019-03-12
      • 2021-08-18
      相关资源
      最近更新 更多