Cordova iOS «Исходное значение null не разрешено Access-Control-Allow-Origin» для локальных файлов

#cordova #cordova-ios

#кордова #cordova-ios

Вопрос:

Я разрабатываю проект на Cordova CLI и компилирую приложение на физическом iPhone, но в консоли появляется ошибка с источником управления доступом.

Это сообщение:

 [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
  

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

Ответ №1:

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

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

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

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

Ответ №2:

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

Проверьте cordova-plugin-ios-xhr

Комментарии:

1. Точно! Тайцы — это решение.

2. Из github.com/globules-io/cordova-plugin-ios-xhr : «АРХИВИРОВАННЫЙ этот плагин больше не нужен»

3. Потому что это не так. Просто установите имя хоста и схему в config.xml

Ответ №3:

Решение:

Проблема заключается только в атрибуте ссылки таблицы стилей 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 для запроса ajax добавить:

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

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