Angular/ HTML5 到 iOS WKWebView 通信

Posted

技术标签:

【中文标题】Angular/ HTML5 到 iOS WKWebView 通信【英文标题】:Angular/ HTML5 to iOS WKWebView communication 【发布时间】:2019-11-07 17:57:00 【问题描述】:

我们正在尝试了解发送一些信号 ios WKWebView 来自 Angular 6,html5 项目的最佳选择。

任何示例都会非常棒。

我们想做的是:我们在 Angular 网页上有一个按钮,点击它应该通知 iOS 执行一些操作。 我们在 iOS 中加载 Angular 页面WKWebView

参考Angular 5 and native IOS/android communication,不是很清楚。如果 ios 和 angular 端都有可用的样本,那就太好了。

【问题讨论】:

【参考方案1】:

Apple 在WebKit 中提供了一种机制,可以将您的 HTML 中的消息发布到本机:

在您的 HTML 页面中,调用:

window.webkit.messageHandlers.messageHandler.postMessage("Pass your data here...");

其中,messageHandler 是您的 iOS 代码中收到的消息的名称。 "Pass your data here..." 是通过messageHandler 消息传递给iOS 的数据。

在您的 iOS 代码中:

使用 WKUserContentController 的 add(_:name:) 方法添加消息处理程序,如下所示:

webView.configuration.userContentController.add(self, name: "messageHandler")

最后,在您的 ViewController 代码中实现 WKScriptMessageHandler 的 userContentController:didReceiveScriptMessage: 方法,例如:

func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) 
     if message.name == "messageHandler" 
          // Your Message handler code goes here...            
     

根据 add(_:name:) 方法的 Apple 文档:

添加一个名为 name 的脚本消息处理程序 导致 javascript 函数 window.webkit.messageHandlers.name.postMessage(messageBody) 在使用用户内容控制器的所有 Web 视图的所有框架中定义。

Apple Documentation link

【讨论】:

以上是关于Angular/ HTML5 到 iOS WKWebView 通信的主要内容,如果未能解决你的问题,请参考以下文章

在 socket.io 中使用 Angular

使用 HTML5 路由时,Angular 2 的路由器是不是损坏? [复制]

禁用日期的 HTML5 日期选择器在 Angular 中不起作用

angular.js html5mode页面刷新问题[重复]

HTML5 音频播放器未在 ios Safari 中自动播放

带有 Html5Mode 的 Angular-UI-Router 刷新页面问题