Chrome扩展跨域请求(Chrome extension Cross Domain Request

2019-06-23 12:18发布

我知道,这已经谈过多次在这里,我已经阅读大多数这些线程,但我似乎无法让我的剧本工作。

问题是,我想使用bitly API来缩短在谷歌浏览器扩展程序的网址。 我节省了用户在localStorage的登录和apiKey之前,我这样做,我验证它们。

这样做的代码是:

$.ajax({
        url:"http://api.bit.ly/v3/validate",
        dataType:'jsonp',
        data:{
            login: login,
            apiKey: apiKey,
            x_login :"test",
            x_apiKey :"test"
        },
        success:function (jo, textStatus, jqXHR) {
            if (jo.status_code == 200) {
                setItem('dg_BitlyApiKey', apiKey);
                setItem('dg_BitlyLogin', login);
                alert('Saved');
            } else {
                alert('Incorrect login and/or apiKey!')
            }
        }
    });

我有我的权限设置为"permissions": ["tabs", "notifications", "http://*/*", "https://*/*"]但我仍然不断收到:

Refused to load script from 'http://api.bit.ly/v3/validate?callback=jQuery17204477599645033479_1334062200771&login=&apiKey=&x_login=test&x_apiKey=test&_=1334062201506' because of Content-Security-Policy.

作品本身的扩展外的剧本,所以我认为这个问题是不是在脚本中但与权限。

我在做什么错在这里?

Answer 1:

问题是,你是不是真的做一个XHR请求,你正在做的一个不安全的HTTP资源JSONP请求。 看到问题如何加载扩展弹出内外部JavaScript和相关的铬bug报告 。

是啊,我们不再允许扩展不安全的脚本。 如果您通过HTTP加载脚本,活动的网络攻击者可以注入脚本到您的扩展,这是一个安全漏洞。

JSONP通过动态地添加一个新的脚本到您的网页,然后执行内容进行操作。 在你的情况下,脚本资源是通过HTTP(而不是HTTPS)获取。 如果您的扩展使用扩展清单第2版,其背景页面不能抓取非HTTPS脚本。

解决方案:如果使用通过HTTPS的Bitly API,我相信,这将解决您的问题。 请将您的Ajax调用https://api-ssl.bitly.com/v3/validate (而非目前的价值http://api.bit.ly/v3/validate



Answer 2:

您需要打包跨域请求运行你的应用程序/扩展。 托管的应用程序将无法做跨域请求。 看到:

跨来源XMLHttpRequest的在Chrome浏览器扩展



文章来源: Chrome extension Cross Domain Request