cordova iOS错误:Access-Control-Allow-Origin不允许原点为空

mw3dktmi  于 2022-11-15  发布在  iOS
关注(0)|答案(3)|浏览(311)

我已将Cordova iOS应用程序升级至最新版本:

iOS 4.1.0
Cordova  6.0.0

我已经更新了插件,还添加了新的WKWebView引擎插件。
我已经将我的内容安全策略添加到index.html文件:

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' 'unsafe-inline' data:;connect-src 'self' https://mydomain/myservice/; plugin-types application/pdf">

我的config.xml始终包含:

<content src="index.html" />
<access origin="*" />

但我加了一句

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

再加上一点。
我控制着应用程序尝试连接的Web服务器,并且已在其上启用了CORS:

<httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="*" />
    </customHeaders>
  </httpProtocol>

服务器具有有效的SSL证书,并且对其的所有调用都是https://。
xCode中的plist有:

Allow Arbitrary Loads : Yes
Exception Domains
    [mydomain]
        NSIncludesSubdomains : Yes
        NSTemporaryExceptionAllowsInsecureHTTPLoads : YES
        NSTemporaryExceptionMinimumTLSVersion : TLSv1.1

我正在直接在设备上构建和运行应用程序,并使用Safari Develop查看错误。

  • 我有一个Android版本的这个应用程序,有自己的更新的基础代码,它的工作很好。*

我进一步的研究表明,这是新的WKWebView引擎插件造成的问题。但唯一的建议,我发现这是在离子论坛,我没有使用离子为这个建设。
为了确认,我在调试时从Safari中收到以下错误消息:

[Error] Failed to load resource: the server responded with a status of 405 (Method Not Allowed) ([my thing], line 0)
[Error] Failed to load resource: Origin null is not allowed by Access-Control-Allow-Origin. ([my thing], line 0)
[Error] XMLHttpRequest cannot load https://[mydomain]/[my service]/[my thing]. Origin null is not allowed by Access-Control-Allow-Origin.
7dl7o3gd

7dl7o3gd1#

请尝试以下解决方案:
在代码中搜索以下行:(可能在多个文件中,因此对所有文件执行此操作)WKWebViewConfiguration* configuration = [[WKWebViewConfiguration alloc] init];
并在其后面添加以下两行:

[configuration.preferences setValue:@TRUE forKey:@"allowFileAccessFromFileURLs"];
[configuration setValue:@"TRUE" forKey:@"allowUniversalAccessFromFileURLs"];
lyr7nygr

lyr7nygr2#

@jcesarmobile是正确的,仅仅将httpProtocol添加到我的web.config是不够的,我还必须将下面的代码添加到global.asax Application_BeginRequest

HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*")
    If HttpContext.Current.Request.HttpMethod.Equals("OPTIONS") Then
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST, PUT, DELETE")
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept")
        HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000")
        HttpContext.Current.Response.End()
    End If
azpvetkf

azpvetkf3#

这个答案不用修改代码就救了我。
https://stackoverflow.com/a/66444794/6606354
此外,此版本还引入了WKURLSchemeHandler支持。使用自定义方案通过提供应用程序内容可修复由于WKWebView对文件方案应用了严格的安全策略而存在的CORS问题。通过在config.xml文件中设置首选项选项scheme和hostname,您可以轻松地将Cordova项目配置为使用自定义方案。

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

文档位置:https://cordova.apache.org/announcements/2020/06/01/cordova-ios-release-6.0.0.html

相关问题