在原生 iOS 应用程序中集成响应式 html 网页并使用 Apache Cordova 进行通信

Posted

技术标签:

【中文标题】在原生 iOS 应用程序中集成响应式 html 网页并使用 Apache Cordova 进行通信【英文标题】:Integrating responsive html webpages in native iOS app and communicate using Apache Cordova 【发布时间】:2019-07-19 10:30:06 【问题描述】:

我有一个 swift 3.0 内置的原生应用程序。现在需要在我们的应用程序中加载一些响应式网页。加载网页后,如果对这些页面采取任何操作,我们的原生代码需要进行一些更改用于显示一些要求。听说 Apache Cordova 实现了这一点。但没有得到适当的教程来理解这个过程。请帮助

【问题讨论】:

【参考方案1】:

如果您的方法有些有限且已知,您可以使用 WKWebView 的消息处理程序回调从 javascript 函数中调用。然后执行一些本机代码,您可以将基本数据发送到这些代码。

为此你需要完成什么:

let contentController = WKUserContentController()
contentController.add(self, name: "nativeCallbackios")

let config = WKWebViewConfiguration()
config.userContentController = contentController

let webView = WKWebView(frame: .zero, configuration: config)

无论什么是“self”,都需要像这样实现 WKScriptMessageHandler:

extension ViewController: WKScriptMessageHandler 
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) 
        if message.name == "nativeCallbackIOS" 
            // do your native stuff here
        
    

在您的网站 javascript 中,您会这样称呼它:

window.webkit.messageHandlers.nativeCallbackIOS.postMessage()

如果需要传递参数,则需要定义规范,因为 WKScriptMessageHandler 上的 message.body 是“Any”类型。一般来说,json 类型是一个聪明的主意,因为你可以使用 jsonserialization 或 codable(如果你升级你的 swift 版本,推荐)。

提示:上面示例中使用的语法是 swift 5,因此方法名称可能不同。

【讨论】:

以上是关于在原生 iOS 应用程序中集成响应式 html 网页并使用 Apache Cordova 进行通信的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 混合应用程序中集成 card.io sdk?

在我的 IOS 应用程序中集成 Tumblr API [关闭]

我们可以开发具有响应性的原生 ios 应用程序吗?

iOS项目中集成Flutter的最新适配升级

响应式设计:在任何屏幕尺寸中集中一个全屏正方形

如何在 iOS 中集成 Chromecast API?