Издеваться над useragent в javascript? - PullRequest
61 голосов
/ 20 августа 2009

Я ищу способ программно изменить navigator.userAgent на лету. В моей неудачной попытке получить автоматический тестер javascript, я сдался и попытался начать использовать fireunit. Сразу же я врезался в одну из стен использования настоящего браузера для тестирования javascript.

В частности, мне нужно изменить navigator.userAgent, чтобы имитировать несколько сотен строк userAgent, чтобы обеспечить надлежащее обнаружение и покрытие определенной функции. navigator.userAgent только для чтения, так что я застрял! Как я могу издеваться над navigator.userAgent? User Agent Switcher (плагин) может переключать useragent FF, но я могу сделать это в javascript?

Ответы [ 14 ]

0 голосов
/ 22 августа 2017

Приведенные выше ответы не работают для PhantomJS + TypeScript. Ниже код работал для меня:

var __originalNavigator = navigator;
(window as any).navigator = new Object();
navigator["__proto__"] = __originalNavigator["__proto__"];
navigator["__defineGetter__"]('userAgent', function () { return 'Custom'; });
0 голосов
/ 07 мая 2014

Изменить навигатор.userAgent в Firefox и Opera через defineGetter

navigator.__defineGetter__('userAgent', function(){
    return( "iPhone 5" );
});

alert( navigator.userAgent ); //iPhone 5

Изменить навигатор.userAgent в IE и Opera через экземпляр объекта

var navigator = new Object; 
navigator.userAgent = 'iPhone 5';

alert( navigator.userAgent ); //iPhone5

Хорошо, если вы работаете с браузером IE, вы можете дважды подделать HTTP-запрос и JavaScript navigator.userAgent через execScript

WebBrowser1.Navigate "http://example.com", , , , "User-Agent: iPhone 5" & vbCrLf

WebBrowser1.Document.parentWindow.execScript ("var navigator=new Object;navigator.userAgent='iPhone 5';")
WebBrowser1.Document.parentWindow.execScript ("alert(navigator.userAgent);") 'iPhone 5
0 голосов
/ 20 августа 2009

navigator.userAgent является строковым свойством только для чтения, поэтому его невозможно редактировать

0 голосов
/ 20 августа 2009

Нет, я сомневаюсь, что вы можете сделать это в JavaScript. Но с помощью User Agent Switcher в Firefox вы можете протестировать любой используемый вами агент, так почему бы просто не использовать его?

...