【问题标题】:Cordova iOS "Origin null is not allowed by Access-Control-Allow-Origin" on local files本地文件上的 Cordova iOS“Access-Control-Allow-Origin 不允许 Origin null”
【发布时间】:2020-09-25 08:09:57
【问题描述】:

我在 Cordova CLI 上开发一个项目并在物理 iPhone 上编译 APP,但在控制台中出现 Access Control Origin 错误。

这是消息:

[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)

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

我的config.xml的配置是:

<?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:*" />

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

<!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 version 10.0.0
cordova-ios version  6.1.1

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

【问题讨论】:

    标签: cordova cordova-ios


    【解决方案1】:

    使用 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 @987654329 就可以了@响应的标题。

    【讨论】:

    • 谢谢!
    【解决方案2】:

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

    查看cordova-plugin-ios-xhr

    【讨论】:

    • 没错!泰国人是解决方案。
    【解决方案3】:

    解决办法:

    问题只是引导样式表的链接上的一个属性:P

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

    问题是:

    crossorigin="anonymous"
    

    只需要这个:

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

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

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

    感谢您的宝贵时间

    【讨论】:

      猜你喜欢
      • 2016-06-30
      • 2012-06-07
      相关资源
      最近更新 更多