本地文件上的Cordova iOS“ Access-Control-Allow-Origin不允许使用Origin null”

问题描述

我在Cordova CLI上开发了一个项目,并在物理iPhone上编译了APP,但是在控制台中访问控制源出现错误

这是消息:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="table_cover">
  <div class="table_element">
    <div class="column_expand_list">X</div>
  </div>
  <div class="element">YAY 1</div>

  <div class="table_element">
    <div class="column_expand_list">X</div>
  </div>
  <div class="element">YAY 2</div>

  <div class="table_element">
    <div class="column_expand_list">X</div>
  </div>
  <div class="element">YAY 3</div>
</div>

错误来自本地文件,也来自ajax。

我的config.xml的配置是:

[Error] Origin null is not allowed by Access-Control-Allow-Origin.
[Error] Failed to load resource: Origin null is not allowed by Access-Control-Allow-Origin. (bootstrap.min.css,line 0)

在我项目中的所有html文件中,元数据都是:

<?xml version='1.0' encoding='utf-8'?>
<widget android-versionCode="14" defaultlocale="es-ES" id="com..." version="2.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name>TEXT</name>
    <description>TEXT</description>
    <author email="MYEMAIL" href="MYURL">
        MYNAME
    </author>
    <content src="index.html" />
    <access origin="*" />        
    <allow-navigation href="*" />
    <preference name="windows-target-version" value="10.0" />
    <preference name="KeyboarddisplayRequiresUserAction" value="false" />
    <allow-intent href="http://*/*" />
    <allow-intent href="https://*/*" />
    <allow-intent href="tel:*" />
    <allow-intent href="sms:*" />
    <allow-intent href="mailto:*" />
    <allow-intent href="geo:*" />

我的项目中的数据是:

<!DOCTYPE html>
<html lang="es">
    <head>
        <Meta charset="utf-8">
        <Meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src * data: content:; connect-src *;">
        <Meta name="format-detection" content="telephone=no">
        <Meta name="msapplication-tap-highlight" content="no">

有人可以帮我解决问题吗? 我非常感谢你

解决方法

对于 Cordova-ios@6,您需要根据文档 here 指定 schemehostname

此外,此版本还引入了 WKURLSchemeHandler 支持。使用自定义方案通过修复由于 WKWebView 已应用于文件方案的严格安全策略而存在的 CORS 问题来为您的应用程序内容提供服务。您可以通过在 config.xml 文件中设置首选项选项方案和主机名,轻松地将 Cordova 项目配置为使用自定义方案。

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

这将从 app://localhost 而不是 file:// 提供您的应用程序,并且您的 xhr 请求的 origin 也将为 app://localhost。由于此源是随 CORS 请求一起发送的,因此您可能希望更改主机名以匹配远程域(如果您的应用程序使用),但只要您将其添加到 CORS {{ 1}} 响应头。

,

解决方案:

问题仅在于bootstrap:P样式表的链接上的一个属性

    <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous" />

问题是:

crossorigin="anonymous"

只需要这个:

<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet"/>

在服务器端,在PHP for ajax请求上添加:

header("Access-Control-Allow-Origin: *")

感谢您的时间

,

这是因为WKWebView没有起源,所以您不能原样使用CORS。您需要一个插件来允许XHR没有起源。

签出cordova-plugin-ios-xhr

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...