Chrome浏览器扩展程序跨域请求

5

我知道这个问题在这里已经被讨论了很多次,而且我已经阅读了大部分的帖子,但似乎我无法使我的脚本工作起来。

问题是我正在尝试使用bitly API来缩短谷歌浏览器扩展中的URL。我将用户的登录和API密钥保存在本地存储中,在此之前我会进行验证。

所需的代码如下:

$.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.

这个脚本本身在扩展程序外运行,因此我认为问题不在于脚本而是权限方面。
这里我做错了什么?

此外,从2019年开始,您必须从后台页面进行跨源请求。请参阅:https://www.chromium.org/Home/chromium-security/extension-content-script-fetches - DrN
3个回答

6
问题在于你并没有真正地发出XHR请求,你正在使用一个不安全的HTTP资源进行JSONP请求。请参考问题如何在扩展程序弹出窗口内加载外部JavaScript以及相关的Chromium漏洞报告

是的,我们不再允许在扩展程序中使用不安全的脚本。如果你使用HTTP加载脚本,则主动网络攻击者可以将脚本注入到你的扩展程序中,这是一种安全漏洞。

JSONP通过动态添加一个新的脚本标签到你的页面上,并执行其中的内容来运行。在你的情况下,脚本资源是通过HTTP获取的(而不是HTTPS)。如果你的扩展程序使用扩展程序清单的第2个版本,则其后台页面无法获取非HTTPS脚本。 解决方案:如果你通过HTTPS使用Bitly API,我相信这将解决你的问题。将你的Ajax调用发送到 https://api-ssl.bitly.com/v3/validate (而不是你当前的值为http://api.bit.ly/v3/validate

0

0

不幸的是,它没有帮助。可能还有其他错误吗? - ShintoTuna
一定有其他错误。尝试制作一个简单的示例,仅从另一个站点加载常规html页面,去掉jsonp数据类型,并验证获取一些简单html的简单跨域调用是否有效。 - Marius Kjeldahl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接