Ошибки XMLHttpRequest после обновления WKWebView в проекте / приложении Ionic v1

После попытки загрузить мое рабочее приложение в магазин я столкнулся с сообщением об ошибке от подключения к магазину приложений, в котором говорилось, что я больше не могу использовать UIWebview, так как он устарел, поэтому я был вынужден перейти на WKWebView.

Я последовал ответу на этот вопрос

Когда я сейчас пытаюсь войти в свое приложение, я получаю следующие ошибки в консоли Safari:

Origin ionic: // localhost не разрешен Access-Control-Allow-Origin

XMLHttpRequest не может загрузить https://www.demo.mywebsite.com/mobile/pages/login из-за проверок контроля доступа

Не удалось загрузить ресурсы: Origin ionic: // localhost не разрешен Access-Control-Allow-Origin.

В моем config.xml есть это

<access origin="http://localhost:8080/*" />
<allow-navigation href="*" />

Я также установил заголовки в PHP-файлах моего сервера следующим образом:

header("Access-Control-Allow-Origin: http://localhost:8080/*");
header("Content-Type: application/json");
header("Access-Control-Allow-Headers: content-type,authorization");
header("Access-Control-Allow-Credentials: true");

Мой веб-сайт размещен на Windows Server 2016. До обновления WKWebView все работало нормально, но теперь я вообще не могу использовать приложение, поскольку оно содержит много HTTP-запросов.

ОБНОВЛЕНИЕ

Я только что внес эти изменения:

<access origin="*" />
<allow-navigation href="*" />

Как и в моем файле сервера:

заголовок (Access-Control-Allow-Origin: *);

Я больше не получаю ошибку ionic://localhost и ошибку Failed to load resources, но получаю следующую ошибку:

Невозможно использовать подстановочный знак в Access-Control-Allow-Origin, если установлен флаг учетных данных.


person J.Do    schedule 22.01.2021    source источник


Ответы (1)


config.xml

Доступ
«Определите набор внешних доменов, с которыми приложение может взаимодействовать. Показанное выше значение по умолчанию позволяет ему получить доступ к любому серверу. »См. документацию.

Этот параметр не имеет ничего общего с origin вашего приложения при выполнении запросов.

Согласно вашему config.xml, вашему приложению разрешено связываться только с http://localhost:8080/*. Очевидно, вы хотите использовать здесь * (или URL-адрес вашего сервера, если ваше приложение выполняет запросы только к вашему серверу).

<access origin="*"></access>

WKWebView

Настройки iOS
«Начиная с версии 3, приложения по умолчанию обслуживаются по схеме ionic:// на iOS.

Источником по умолчанию для запросов от iOS WebView является ionic://localhost. Если установлены предпочтения Hostname и iosScheme, тогда исходной точкой будет iosSchemeValue://HostnameValue.

Такие значения, как http, https или file недействительны, вместо них будет использоваться значение по умолчанию. »
См. документацию.

На вашем сервере вам нужно разрешить источник ionic://localhost.
Если вы хотите, чтобы устройства Android могли взаимодействовать с вашим сервером, вам необходимо разрешить и ionic://localhost, и http://localhost, или *, чтобы разрешить все источники.

Сервер

Например, вы можете разрешить оба источника на своем сервере.

$allowedDomains = ['ionic://localhost', 'http://localhost'];

if (in_array($_SERVER['HTTP_ORIGIN'], $allowedDomains)) {
    header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']);
}
person Reqven    schedule 22.01.2021
comment
Спасибо за ответ! Я только что применил ваши ответы, но все еще получаю Cannot use wildcard in Access-Control-Allow-Origin when credential flag is true., а также ошибку контрольных проверок. - person J.Do; 23.01.2021
comment
Хорошо, это означает, что вы не можете использовать *. Вместо этого вы должны разрешить оба источника. Я обновил свой ответ примером для вашего сервера. - person Reqven; 23.01.2021
comment
Это сработало! Спасибо! Я только что заметил, что мои сеансы PHP не сохраняются. Есть ли способ, чтобы это сработало? Я только что исследовал это, и похоже, что это так. - person J.Do; 23.01.2021
comment
Пожалуйста. Я понятия не имею, что сеансы PHP не сохраняются. Поскольку это не по теме, я предлагаю вам создать еще один вопрос по этой конкретной теме. Пожалуйста, примите мой ответ, если он решил вашу проблему, спасибо :) - person Reqven; 23.01.2021