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://localhost
和 http://localhost
,或者 *
允许所有来源。
服务器
例如,您可以在您的服务器中允许这两个来源。
$allowedDomains = ['ionic://localhost', 'http://localhost'];
if (in_array($_SERVER['HTTP_ORIGIN'], $allowedDomains)) {
header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']);
}
尝试将我的工作应用程序上传到商店后,我遇到了一条来自应用程序商店连接的错误消息,说我不能再使用 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 fromionic://
scheme on iOS by default.The default origin for requests from the iOS WebView is
ionic://localhost
. IfHostname
andiosScheme
preferences are set, then origin will beiosSchemeValue://HostnameValue
.Values like
http
,https
orfile
are not valid and will use default value instead. »
See documentation.
在您的服务器上,您需要允许来源 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']);
}