在 Chrome 扩展中为 HTTP 请求设置用户代理
Set user agent for HTTP request in Chrome extension
我正在用纯 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);
为什么不能以这种方式修改用户代理?
您不能在那种请求中设置该标题,浏览器会阻止它 - 以及许多其他 header 类型。
在 Chrome 扩展中,您可以使用 chrome.webRequest 来改变 headers。
这将调整用户代理。按照 Match Patterns 准则更改为您想要的 URL。请记住将 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"]);
我正在用纯 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);
为什么不能以这种方式修改用户代理?
您不能在那种请求中设置该标题,浏览器会阻止它 - 以及许多其他 header 类型。
在 Chrome 扩展中,您可以使用 chrome.webRequest 来改变 headers。
这将调整用户代理。按照 Match Patterns 准则更改为您想要的 URL。请记住将 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"]);