Ionic v1 上 WKWebView 升级后的 XMLHttpRequest 错误 project/app

XMLHttpRequest Faults after WKWebView Upgrade on Ionic v1 project/app

尝试将我的工作应用程序上传到商店后,我遇到了一条来自应用程序商店连接的错误消息,说我不能再使用 UIWebview,因为它已被弃用,所以我被迫升级到 WKWebView。

我遵循了 问题的答案

当我现在尝试登录我的应用程序时,我在 Safari 控制台上收到以下错误:

Origin ionic://localhost is not allowed by Access-Control-Allow-Origin

XMLHttpRequest cannot load https://www.demo.mywebsite.com/mobile/pages/login due to access control checks

Failed to load resources: Origin ionic://localhost is not allowed by Access-Control-Allow-Origin.

在我的 config.xml 我有这个

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

我还通过这种方式在我的服务器 PHP 文件上设置 headers:

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="*" />

以及我的服务器文件中的这个:

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

我不再收到 ionic://localhost 错误和 Failed to load resources 错误,但我收到此错误:

Cannot use wildcard in Access-Control-Allow-Origin when credentials flag is true.

config.xml

Access
« Define the set of external domains the app is allowed to communicate with. The default value shown above allows it to access any server. » See documentation.

此设置与您的应用在执行请求时的origin无关。

根据您的 config.xml,您的应用只允许与 http://localhost:8080/* 通信。您显然想在此处使用 *(如果您的应用仅向您的服务器发出请求,则您的服务器 url)。

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

WKWebView

iOS Preferences
« Since version 3, apps are served from ionic:// scheme on iOS by default.

The default origin for requests from the iOS WebView is ionic://localhost. If Hostname and iosScheme preferences are set, then origin will be iosSchemeValue://HostnameValue.

Values like http, https or file are not valid and will use default value instead. »
See documentation.

在您的服务器上,您需要允许来源 ionic://localhost
假设您希望 Android 设备也能够与您的服务器通信,您需要同时允许 ionic://localhosthttp://localhost,或者 * 允许所有来源。

服务器

例如,您可以在您的服务器中允许这两个来源。

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

if (in_array($_SERVER['HTTP_ORIGIN'], $allowedDomains)) {
    header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']);
}