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>
我已将现有应用程序更新到 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>