在Chrome扩展程序中为HTTP请求设置用户代理

时间:2015-01-08 07:26:04

标签: javascript google-chrome-extension xmlhttprequest user-agent

我在纯JavaScript中编写Chrome扩展程序,并希望将HTTP请求的用户代理更改为给定的URL,因为该URL的所有者已请求使用某种格式的用户代理。

以下代码一直有效,直到添加了用户代理修改行,此时Chrome检查器控制台会显示错误Refused to set unsafe header "User-Agent"

var xhr = new XMLHttpRequest();
xhr.open("GET", serviceURL, true, username, password);
xhr.setRequestHeader('User-Agent', 'MyExtensionName/0.0.1');
xhr.onreadystatechange = function() {
    // do some stuff
}
xhr.send(null);

为什么不能以这种方式修改用户代理?

1 个答案:

答案 0 :(得分:4)

您无法在此类请求中设置该标题,浏览器会阻止它 - 以及许多其他标题类型。

在Chrome扩展程序中,您可以使用chrome.webRequest更改标题。

这将调整用户代理。按照Match Patterns指南更改为您想要的网址。请记住将webRequest和webRequestBlocking的权限添加到清单。

chrome.webRequest.onBeforeSendHeaders.addListener(function(details){
    for(var i=0; i < details.requestHeaders.length; ++i){
        if(details.requestHeaders[i].name === "User-Agent"){
            details.requestHeaders[i].value = "Desired User Agent Here";

            break;
        }
    }
    return {requestHeaders: details.requestHeaders};
}, {urls: ["<all_urls>"]}, ["blocking", "requestHeaders"]);