在Chrome扩展程序中,更改发送到某个域的ajax请求的引荐来源?

Sam*_*Sam 8 javascript jquery google-chrome google-chrome-extension

我做了一些研究,现在我知道不可能在谷歌浏览器中发送带有更改引荐来源的请求,因为浏览器会覆盖更改,但无论如何/谷歌Chrome扩展程序中的任何权限都会禁用此功能,或者使它成为可以使用不同的引荐来源向某个域发送请求?

Web*_*L3D 14

chrome.webRequest正是您所寻找的,特别是您的onBeforeSendHeaders活动.它允许您在发送请求之前更改任何标头(甚至是不安全的标头),但只能在后台脚本中使用.

你需要添加webRequestwebRequestBlocking在清单到您的权限列表.

chrome.webRequest.onBeforeSendHeaders.addEventListener(handle(details), filterObject, extraInfoArray);
Run Code Online (Sandbox Code Playgroud)

这是一个例子:

chrome.webRequest.onBeforeSendHeaders.addListener(function(details){
    var newRef = "http://referer.domain/helloworld.example";
    var gotRef = false;
    for(var n in details.requestHeaders){
        gotRef = details.requestHeaders[n].name.toLowerCase()=="referer";
        if(gotRef){
            details.requestHeaders[n].value = newRef;
            break;
        }
    }
    if(!gotRef){
        details.requestHeaders.push({name:"Referer",value:newRef});
    }
    return {requestHeaders:details.requestHeaders};
},{
    urls:["http://target.domain/*"]
},[
    "requestHeaders",
    "blocking"
]);
Run Code Online (Sandbox Code Playgroud)

filterObject告诉它只是火把手任何匹配列表中的人的URL.

extraInfoArray告诉你想要获取requestHeaders,并blocking告诉它暂停请求直到句柄完成.

  • 从chrome 72开始,还必须将“ extraHeaders”添加到extraInfoArray以便设置以下标头:Accept-Language,Accept-Encoding,referer,Cookie (2认同)