Cordova 6 应用无法从 file:// 路径加载

Cordova 6 app cannot load from file:// path

我已将现有应用程序更新到 Cordova 6.0.0,但在 iOS 设备 XCode 7.2.1 目标 iOS 9 上遇到问题 运行 .

我已经安装了WKWebView插件:cordova-plugin-wkwebview-engine 1.0.2

当 运行 使用 AngularJS 构建的应用程序时,它尝试做的第一件事就是打开一个 json 文件:

$http.get('data/config.json').success(function(data) {
  // do stuff
});

但是我们在 web 视图控制台中得到这个错误:

XMLHttpRequest cannot load file:///var/mobile/Containers/Bundle/Application/
E9D74C94-ADC6-410F-9F41-7CE63CB7877F/Milk.app/www/data/config.json. Cross 
origin requests are only supported for HTTP.

在 config.xml 文件中我们有:

<access origin="*" subdomains="true" />

为什么 file:// 请求会像这样被阻止,我该如何解决?

*编辑*

根据 plugin page:

"In iOS 9, Apple has fixed the issue present through iOS 8 where you cannot load locale files using file://, and must resort to using a local webserver. However, you are still not able to use XHR from the file:// protocol without CORS enabled on your server."

"your server"是什么意思?什么服务器?我们正在加载本地文件,没有服务器!

编辑:

ionic 团队一直致力于 WKWebViewEngine 插件的分支,并修复了一些 XHR 问题,不确定这个是否已修复。你可以看看 https://github.com/driftyco/cordova-plugin-wkwebview-engine

旧答案: 这是一个已知问题,在 WKWebViewEngine (https://issues.apache.org/jira/browse/CB-10143)

中不允许本地 file:// url XmlHttpRequests

有关更多已知问题,请参阅 https://issues.apache.org/jira/browse/CB-10237?jql=labels%20%3D%20wkwebview-known-issues

如果你想拨打本地 ajax 电话,你应该使用 wkwebview-engine-localhost 插件 (https://github.com/apache/cordova-plugins/tree/master/wkwebview-engine-localhost)

或 Telerik 的 WKWebView 插件 (https://github.com/Telerik-Verified-Plugins/WKWebView)。

他们都将使用本地网络服务器来解决一些已知的 WKWebView 限制。

我在本地文件访问以及 SQLite 访问方面遇到了问题。我根据找到的一些示例代码创建了一个插件,对其进行了修改以使其正常工作,现在看起来效果很好。 YMMV

https://github.com/TheMattRay/cordova-plugin-wkwebviewxhrfix

我使用 Oracle's plugin

解决了这个问题

将这些行添加到您的 config.xml 文件中。这解决了我读取本地文件的问题。

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