我一直在搜索这个问题,但我仍然找不到任何解决办法。
我正在开发App cordova(basicely HTML / JS) 所以:该应用程序在导航器上运行,我无法向API发出ajax请求:https://developer.riotgames.com/ 但是,让我们说我只想获得谷歌页面。
我怎么做到这一点,这甚至可能吗? 这是一个简单的例子:
$.ajax({
type: "GET",
url: "https://google.com",
dataType: "text",
success: function(response){
alert("!!!");
},
error: function(error){
alert("...");
}
});
我一次又一次地遇到同样的错误:
XMLHttpRequest无法加载https://google.com/。没有 请求中存在“Access-Control-Allow-Origin”标头 资源。因此,“null”原因不允许访问
原点'null'是因为我运行了来自file:///D:/Projets/LoL/www/index.html
的代码,并且我读到导航器正在阻塞,但如果我使用--disable-web-security
禁用安全性,它也无法正常工作
当然,我无权访问我想加入的服务器。
非常感谢你的帮助!
答案 0 :(得分:16)
您需要Cordova白名单插件:https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-whitelist/。
在config.xml中有这个:
<access origin="*" />
<allow-navigation href="*"/>
在index.html中使用Content-Security-Policy元。类似的东西:
<meta http-equiv="Content-Security-Policy" content="default-src *; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data:">
答案 1 :(得分:2)
如果 Cordova 白名单插件不适合您,您可以使用 Cordova 高级 Http 插件调用外部服务器。
安装使用: cordova 插件添加cordova-plugin-advanced-http
插件链接: https://github.com/silkimen/cordova-plugin-advanced-http?ref=hackernoon.com
答案 2 :(得分:0)
如果您刚从2019年8月1日开始遇到此问题。此Access-Control-Allow-Origin Error..(using cordova)可能与问题有关。
答案 3 :(得分:0)
不需要这样做
您只需尝试更改权限
<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
<uses-permission android:name="android.permission.INTERNET" />
<application
...
android:usesCleartextTraffic="true"
...>
...
</application>
答案 4 :(得分:0)
我找到了类似情况的解决方案,但出现错误: “access-control-allow-origin 不能包含多个来源”
最终我发现虽然我已经将我的 .net 核心 API 设置为允许所有这样的来源:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors();
...
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseCors(builder => builder
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader());
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
...
然后我在 API 的网站根目录的 web.config 文件中留下了一个旧的 CORS 命令:
<customHeaders>
<add name="Access-Control-Allow-Origin" value="https://localhost:444" />
</customHeaders>
我注释掉了 customHeaders 部分并且它起作用了。
任务完成!
答案 5 :(得分:-1)
我在nodjs服务器中添加了以下内容来解决我的问题;
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
如果您使用nodejs,这可能会有所帮助。
由于