从Chrome扩展程序发送AJAX

时间:2014-08-20 12:28:28

标签: javascript ajax google-chrome google-chrome-extension

我想创建一个可以使用XMLHttpRequest发送AJAX调用的Chrome扩展程序。我向其发送请求的网站不是我的。

当网站获得AJAX呼叫时,它会检查请求的Referer标头。如果我从后台页面(Chrome扩展程序)发送AJAX,则不会发送Referer标头,并且请求被拒绝。

如何更改背景页面中的Referer标题?

3 个答案:

答案 0 :(得分:3)

您应该能够使用webRequest API拦截您自己的请求并修改请求标头。

具体来说,以阻止方式收听chrome.webRequest.onBeforeSendHeaders,编辑标题对象,然后将其返回到覆盖标题。

并非所有标头都可以通过这种方式修改,但Referer可以。

答案 1 :(得分:3)

如Xan的回答所述,您需要使用webRequest API。由于我喜欢答案中的最小例子,所以这里有一个:

manifest.json权限需要包含:

"permissions": [
    "*://target.site/", 
    "webRequest",
    "webRequestBlocking"
]

用于修改包含任意引用的请求的js代码:

callback = function(details) {
    details.requestHeaders.push({
        name: 'Referer',
        value: 'http://your.arbitrary.referer'
    });
    return {
        requestHeaders: details.requestHeaders
    };
};

filter = { urls: ["*://target.site/target.html"] };
opts = ['blocking', 'requestHeaders']
chrome.webRequest.onBeforeSendHeaders.addListener(callback, filter, opts);

每当浏览器立即向*://target.site/target.html发出请求时,引用者将被设置为http://your.arbitrary.referer。这对于用户完成的请求(通过单击链接或在执行AJAX请求的站点上)以及您自己的扩展的AJAX请求生效。

答案 2 :(得分:0)

W3规范明确禁止更改' Referer' -header。当您尝试手动设置Referer时,请求将被拒绝。

来源:http://www.w3.org/TR/XMLHttpRequest/#dom-xmlhttprequest-setrequestheader