#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: *")
Спасибо за ваше время