1

Я пишу расширение Chrome в чистом JavaScript и хочу изменить агент пользователя для HTTP-запросов на заданный URL-адрес, поскольку владелец этого URL-адреса запросил, чтобы пользовательский агент используется определенный формат.Установить пользовательский агент для HTTP-запроса в расширении Chrome

Следующий код работает до тех пор, пока не будет добавлена ​​строка модификации пользовательского агента, после чего консоль инспектора 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); 

Почему невозможно изменить агент пользователя таким образом?

ответ

4

Вы не можете установить этот заголовок в запросе такого типа, браузер заблокирует его - вместе со многими другими типами заголовков.

В расширении Chrome, однако, вы можете использовать chrome.webRequest для изменения заголовков.

Это позволит настроить User Agent. Перейдите на нужный URL-адрес, следуя рекомендациям 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"]); 
Смежные вопросы