Cordova iOS 跨源请求仅支持 HTTP

Posted

技术标签:

【中文标题】Cordova iOS 跨源请求仅支持 HTTP【英文标题】:Cordova iOS Cross origin requests are only supported for HTTP 【发布时间】:2016-07-26 21:23:00 【问题描述】:

我正在构建一个 ios 应用,最近将 cordova-ios 升级到 4.1.0 并开始使用:cordova-plugin-wkwebview-engine。

问题是现在我在尝试加载依赖项时收到错误消息Cross origin requests are only supported for HTTP,因此应用程序无法启动。

它试图通过 file:// 加载 systemjs 依赖项,但我包含在我的 config.js 中。

我不知道如何解决这个问题。有没有人有这种行为的经验?

cordova 版本:6.1,0 科尔多瓦 ios 版本:4.1.0

相关的config.xml位:

<access origin="*" />
<feature name="CDVWKWebViewEngine">
  <param name="ios-package" value="CDVWKWebViewEngine" />
</feature>

<preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine" />

【问题讨论】:

这是 WKWebView 的一个已知限制,您可以尝试安装 wkwebview-engine-localhostplugin 添加网络服务器并解决您的问题 github.com/apache/cordova-plugins/tree/master/… 你在这方面有没有成功? 这解决了我的问题。知道 Apple 是否仍会使用此解决方案接受您的应用进入商店? 【参考方案1】:

我的 cordova 项目(实际上是 Ionic v1)遇到了同样的问题,我使用以下命令修复它:

cordova plugin add https://github.com/apache/cordova-plugins.git#wkwebview-engine-localhost

这将安装一个在本地运行的网络服务器,之后错误应该会消失。运行该命令后,只需运行:

cordova prepare ios

或删除所有插件并重新安装:

rm -rf plugins/
cordova platform add ios

确保你的 config.xml 中有这个:

<access origin="*" />
<feature name="CDVWKWebViewEngine">
  <param name="ios-package" value="CDVWKWebViewEngine" />
</feature>

<preference name="CordovaWebViewEngine" value="CDVWKWebViewEngine" /> 

【讨论】:

【参考方案2】:

安装以下插件:

cordova plugin add cordova-plugin-wkwebview-engine    
cordova plugin add cordova-plugin-wkwebview-file-xhr    
cordova plugin add https://github.com/TheMattRay/cordova-plugin-wkwebviewxhrfix

添加到config.xml:

<platform name="ios">
  ...
   <preference name="WKWebViewOnly" value="true"/>
  ...
 </platform> 

【讨论】:

【参考方案3】:

安装这个插件(cordova-ios 6+)

  cordova plugin add https://github.com/globules-io/cordova-plugin-ios-xhr

然后设置

  <preference name="AllowUntrustedCerts"  value="true" />
  <preference name="InterceptRemoteRequests" value="all" />
  <preference name="allowFileAccessFromFileURLs" value="true" />
  <preference name="allowUniversalAccessFromFileURLs" value="true" />

【讨论】:

你节省了我的一天,请注意,有时会自动添加首选项。 其他方法都试过了,只有这一种有效! kCFErrorDomainCFNetwork error 1 尝试后【参考方案4】:

对于 Cordova iOS 6+ 只需要安装以下插件。

cordova plugin add https://github.com/AraHovakimyan/cordova-plugin-wkwebviewxhrfix

此插件不依赖任何其他附加插件,也不需要额外的权限。

【讨论】:

你为我节省了很多时间! 这个插件打破了最新版本的cordova-ios的构建 您好 João Pimentel Ferreira,请告诉我问题的详细信息以及您使用的是什么 Cordova-ios 版本?【参考方案5】:

我的 ionic v1 Cordova 项目遇到了同样的问题。对我来说,解决方案是迁移到电容器,如下所示:

启动一个新的 Ionic v1 项目(% ionic start Bienchen blank --type ionic1) 当 cli 询问是否集成“电容器”时,回答“是”。 在新 Ionic v1 项目的 www 文件夹中查看我的源代码 使用电容器构建项目(% ionic 电容器构建 iOS)

记住 Cordova config.xml 比不再使用,而是在 Xcode Project 中配置。

【讨论】:

以上是关于Cordova iOS 跨源请求仅支持 HTTP的主要内容,如果未能解决你的问题,请参考以下文章

Django AJAX 错误:仅协议方案支持跨源请求

跨源请求仅支持 HTTP

跨源请求仅支持 HTTP

跨源请求仅支持协议方案错误反应

“仅 HTTP 支持跨源请求。”加载本地文件时出错

“仅 HTTP 支持跨源请求。”加载本地文件时出错