Cordova iOS error: Origin null is not allowed by Access-Control-Allow-Origin
Cordova iOS error: Origin null is not allowed by Access-Control-Allow-Origin
我已经将我的 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.*" />
很好的衡量标准。
我控制应用程序尝试连接的网络服务器,并且我在其上启用了 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 引擎插件导致了这个问题。但是我发现的唯一建议是在 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.
@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
试试这个解决方案:
搜索以下行的代码:(可能在几个文件中,所以对所有文件都这样做)
WKWebViewConfiguration* configuration = [[WKWebViewConfiguration alloc] init];
并在其后添加如下两行:
[configuration.preferences setValue:@TRUE forKey:@"allowFileAccessFromFileURLs"];
[configuration setValue:@"TRUE" forKey:@"allowUniversalAccessFromFileURLs"];
我已经将我的 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.*" />
很好的衡量标准。
我控制应用程序尝试连接的网络服务器,并且我在其上启用了 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 引擎插件导致了这个问题。但是我发现的唯一建议是在 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.
@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
试试这个解决方案:
搜索以下行的代码:(可能在几个文件中,所以对所有文件都这样做)
WKWebViewConfiguration* configuration = [[WKWebViewConfiguration alloc] init];
并在其后添加如下两行:
[configuration.preferences setValue:@TRUE forKey:@"allowFileAccessFromFileURLs"];
[configuration setValue:@"TRUE" forKey:@"allowUniversalAccessFromFileURLs"];