如何在 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 && 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的覆盖方法?