我已将现有应用更新到Cordova 6.0.0,但在使用XCode 7.2.1定位iOS 9的iOS设备上运行时遇到问题。
我已经安装了WKWebView插件:cordova-plugin-wkwebview-engine 1.0.2
当运行使用AngularJS构建的应用程序时,它尝试做的第一件事就是打开一个json文件:
$http.get('data/config.json').success(function(data) {
// do stuff
});
但我们在网络视图控制台中收到此错误:
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:
“在iOS 9中,Apple通过iOS 8解决了您所遇到的问题 无法使用file://加载区域设置文件,并且必须使用a 本地网络服务器。但是,您仍然无法使用XHR file://在您的服务器上未启用CORS的协议。“
“您的服务器”是什么意思?什么服务器?我们正在加载一个本地文件,没有服务器!
答案 0 :(得分:6)
编辑:
离子团队一直在研究WKWebViewEngine插件的一个分支,并修复了一些XHR问题,不确定这个问题是否已修复。您可以查看https://github.com/driftyco/cordova-plugin-wkwebview-engine
旧答案:
这是一个已知问题,file://
(https://issues.apache.org/jira/browse/CB-10143)
XmlHttpRequests
网址WKWebViewEngine
有关更多已知问题,请参阅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限制。
答案 1 :(得分:4)
在您的 config.xml 文件中添加这些行。这解决了我读取本地文件的问题。
struct student* addStudent(struct student* list, int* length){
struct student* newList = malloc(sizeof(list)*(*length+1));
for (int i=0; i<*length; i++){
strcpy(newList[i].name, list[i].name);
strcpy(newList[i].rollNumber, list[i].rollNumber);
strcpy(newList[i].class, list[i].class);
};
//Adding some data in the added element
free(list);
(*length)++;
return newList;
}
void main(){
struct student* list = malloc(sizeof(struct student));
struct student** ptrToList = &list;
strcpy(list[0].name, "");
strcpy(list[0].rollNumber, "");
strcpy(list[0].class, "");
int length = 1;
while (1){
printOptions();
int option;
printf("Your pick: ");
scanf("%d", &option);
newLn();
switch(option){
case 1:
*ptrToList = addStudent(*ptrToList, &length);
答案 2 :(得分:1)
我遇到了本地文件访问问题,包括SQLite访问。我根据我发现的一些示例代码创建了一个插件,对其进行了修改以使其正常工作,现在看起来效果很好。 YMMV
https://github.com/TheMattRay/cordova-plugin-wkwebviewxhrfix
答案 3 :(得分:0)