Cordova iOS错误:Access-Control-Allow-Origin不允许使用Origin null

Dav*_*Sav 7 xmlhttprequest cors ios cordova cordova-plugins

我已将Cordova iOS应用升级到最新版本:

iOS 4.1.0
Cordova  6.0.0
Run Code Online (Sandbox Code Playgroud)

我已经更新了插件并添加了新的WKWebView Engine插件.

我已将Content-Security-Policy添加到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">
Run Code Online (Sandbox Code Playgroud)

我的config.xml始终包含:

<content src="index.html" />
<access origin="*" />
Run Code Online (Sandbox Code Playgroud)

但我补充说

<access origin="*.mydomain.*" />
Run Code Online (Sandbox Code Playgroud)

好的措施.

我控制了应用程序尝试连接的Web服务器,并且我已经启用了CORS:

<httpProtocol>
    <customHeaders>
      <add name="Access-Control-Allow-Origin" value="*" />
    </customHeaders>
  </httpProtocol>
Run Code Online (Sandbox Code Playgroud)

服务器具有有效的SSL证书,并且所有调用都是https://.

我在xCode中的plist有:

Allow Arbitrary Loads : Yes
Exception Domains
    [mydomain]
        NSIncludesSubdomains : Yes
        NSTemporaryExceptionAllowsInsecureHTTPLoads : YES
        NSTemporaryExceptionMinimumTLSVersion : TLSv1.1
Run Code Online (Sandbox Code Playgroud)

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

我有这个应用程序的Android版本,有自己更新的基本代码,工作正常.

我的进一步研究表明,这是导致问题的新WKWebView Engine插件.但我发现的唯一建议是在Ionic论坛中,我没有使用Ionic进行此构建.

只是为了确认,这些是我在调试中从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.
Run Code Online (Sandbox Code Playgroud)

小智 7

试试这个解决方案:

搜索以下行的代码:(可能在几个文件中,所以对所有文件都这样做) WKWebViewConfiguration* configuration = [[WKWebViewConfiguration alloc] init];

并在其后添加以下两行:

[configuration.preferences setValue:@TRUE forKey:@"allowFileAccessFromFileURLs"];
[configuration setValue:@"TRUE" forKey:@"allowUniversalAccessFromFileURLs"];
Run Code Online (Sandbox Code Playgroud)


Dav*_*Sav 1

@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
Run Code Online (Sandbox Code Playgroud)