如何在 cordova-ios 6.1.0 中实现原生 WKURLSchemeHandler

Posted

技术标签:

【中文标题】如何在 cordova-ios 6.1.0 中实现原生 WKURLSchemeHandler【英文标题】:How to implement a native WKURLSchemeHandler in cordova-ios 6.1.0 【发布时间】:2020-08-18 15:13:36 【问题描述】:

我正在开发一个 cordova ios (6.1.0) 项目,我想实现一个原生 WKURLSchemeHandler 拦截自定义方案处理以解决我的 cors 问题。

详细来说,我想做这样的事情:https://medium.com/@kumarreddy_b/custom-scheme-handling-in-uiwebview-wkwebview-bbeb2f3f6cc1

直到 iOS 11,我们没有任何系统 API 来拦截来自 WKWebView 的事件。在 iOS 11 中,我们为 WKWebView 提供了一个名为 WKURLSchemeHandler 的新 API,以使我们的生活更简单。

这意味着如果你想自己处理一些请求,那么只需定义自定义方案并将其设置为 WKWebViewConfiguration。

我的自定义方案是 app://myapp,但我需要实现 WKURLSchemeHandler 并将其注册到 WKWebViewConfiguration。

有没有办法在cordova上实现原生ios代码?

【问题讨论】:

【参考方案1】:

你不需要实现 SchemeHandler,它已经在 cordova-ios 中了。只需将此方案放在您的 config.xml 中即可:

<platform name="ios">
  <preference name="scheme" value="app" />
  <preference name="hostname" value="localhost" />
  ....
</platform>

(您可能还需要设置 iosExtraFilesystems 和 iosPersistentFileLocations 首选项)

并在您的 JS 代码中从 WkWebKit 获取实际 URL,例如cordova.file.DataDirectory :

url = window.WkWebView.convertFilePath( cordova.file.dataDirectory ) + subPath;
window.open( url );

【讨论】:

这应该是公认的答案,我可以像常规接受一样使用我的代码,只需为图像 src 添加if(window.WkWebView &amp;&amp; window.WkWebView.convertFilePath) file = window.WkWebView.convertFilePath(file);。作品

以上是关于如何在 cordova-ios 6.1.0 中实现原生 WKURLSchemeHandler的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Visual Studio 2015 Cordova 项目中更新 cordova-ios 版本?

如何在Castle.Core中实现IProxyGenerationHook的类中实现Equals和GetHashCode的覆盖方法?

如何在android中实现svm模型?

如何在 laravel 中实现 vuetify?

如何在android中实现BottomAppBar?

如何在 Spring Boot 中实现刷新令牌