CORS + Cordova:问题:Access-Control-Allow-Origin

时间:2016-05-23 19:08:57

标签: javascript jquery ajax cordova cors

我一直在搜索这个问题,但我仍然找不到任何解决办法。

我正在开发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禁用安全性,它也无法正常工作 当然,我无权访问我想加入的服务器。

非常感谢你的帮助!

6 个答案:

答案 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

额外信息: https://hackernoon.com/a-practical-solution-for-cors-cross-origin-resource-sharing-issues-in-ionic-3-and-cordova-2112fc282664

答案 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,这可能会有所帮助。

由于