2016-09-06 7 views
0

Если вы используете FireFox, navigator имеет свойство oscpu.Удалить oscpu property from from window.navigator

Свойство можно легко изменить, добавив general.oscpu.override значение в about:config.

Но этот параметр присутствует только в FireFox и не существует ни в каком другом браузере. Это позволяет 100% уверенность в определении типа браузера.

Обычные средства не могут его удалить. Что бы ни случилось, что (oscpu in navigator) вернется false.

Все это не работает:

delete navigator.oscpu; 
'oscpu' in navigator; // true 

navigator.oscpu = null; 
'serviceWorker' in navigator; // true 
navigator.oscpu === null; // false 

Object.defineProperty(navigator, "oscpu", { 
    configurable: true, 
    value: undefined 
}); 
'oscpu' in navigator; // true 
navigator.oscpu === undefined; // true 

Существуют ли способы, чтобы удалить этот объект из навигатора? И вообще любой другой параметр. Я пишу расширение SDK надстройки Firefox.

+0

Какую цель вы ставите перед собой? Вы пытаетесь различать браузеры? Вы пытаетесь создать надстройку SDK надстройки Firefox, которая делает Firefox похожим на Google Chrome на определенный код JavaScript? в общем, JavaScript? Существует несколько способов разграничения между браузерами. Содержимое «navigator.oscpu» или даже полный объект «навигатор» не является единственным. – Makyen

+0

«Вы пытаетесь создать надстройку SDK надстройки Firefox, которая делает Firefox похожим на Google Chrome» - да. В точку. Изменение пользовательского агента в FireFox на Chrom мы раскрываем это изменение параметра oscpu. Что еще вам нужно учитывать? –

ответ

0

Существуют потенциальные побочные эффекты от того, что вы хотите достичь. Было бы полезно узнать, каковы ваши цели, чтобы определить хороший способ достижения желаемого.

Однако, для того, что вы специально просили, удаление navigator.oscpu в текущей области, следующие виды работ:

//This specific code relies on navigator referring to the object which you want to 
// modify. In an Add-on SDK extension, if navigator is _actually_ the object you need 
// to modify to accomplish what you desire will depend on the scope you are in and 
// what object you have set the variable navigator to refer to. 

delete navigator.__proto__.oscpu; 
console.log(navigator.oscpu);  // undefined 
'oscpu' in navigator    // false 

Заметим, что вам нужно будет сделать это в любом контексте/области, в которой вы хотите для него иметь эффект. В общем, это означает, что вам нужно будет внедрить сценарий содержимого на каждую страницу и фрейм, в котором вы хотите, чтобы это было так. Это также означает, что вы должны позаботиться о том, чтобы делать это только в контексте/областях, в которых вы хотите, чтобы это было видно по любому JavaScript, который вы пытаетесь подделать (то есть в рамках сценариев страницы, а не в области запуска кода с привилегиями Chrome.).