Кордова iOS Origin null не разрешена Access-Control-Allow-Origin для локальных файлов

Я разрабатываю проект на Cordova CLI и компилирую приложение на физическом iPhone, но в консоли есть ошибка с 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

Может ли кто-нибудь помочь мне исправить проблему? Я вам очень благодарен


person Jorhel Reyes    schedule 25.09.2020    source источник


Ответы (3)


Для Cordova-ios @ 6 вам необходимо указать scheme и hostname в соответствии с документами здесь:

Кроме того, в этом выпуске добавлена ​​поддержка WKURLSchemeHandler. Использование настраиваемой схемы для обслуживания содержимого вашего приложения посредством исправления проблем CORS, которые существуют из-за строгих политик безопасности, которые WKWebView применил к файловой схеме. Вы можете легко настроить свой проект Cordova для использования пользовательской схемы, установив схему параметров предпочтений и имя хоста в файле config.xml.

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

Это будет обслуживать ваше приложение с app://localhost вместо file://, и ваш origin для запросов xhr также будет app://localhost. Поскольку этот источник отправляется с запросами для CORS, вы, вероятно, захотите изменить имя хоста, чтобы оно соответствовало домену вашего пульта (если ваше приложение его использует), хотя все должно быть в порядке, если вы добавляете его в свои заголовки CORS Access-Control-Allow-Origin на ответ.

person adamdport    schedule 02.03.2021

Решение:

Проблема только в атрибуте ссылки таблицы стилей начальной загрузки: 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: *")

Спасибо за ваше время

person Jorhel Reyes    schedule 25.09.2020

Это потому, что нет источника из WKWebView, поэтому вы не можете использовать CORS как есть. Вам нужен плагин, чтобы разрешить XHR без происхождения.

Ознакомьтесь с cordova-plugin-ios-xhr

person Eric    schedule 27.09.2020
comment
Точный! Тайцы - это решение. - person Jorhel Reyes; 03.03.2021