Как я могу обмануть сайт, который смотрит на JavaScript-объект «навигатор», чтобы увидеть, что я не на Windows? - PullRequest
16 голосов
/ 30 января 2010

Я пытаюсь просмотреть веб-сайт, однако он работает только под Windows и Mac, потому что они используют navigator.platform из JavaScript, чтобы выяснить архитектуру, на которой я работаю. Конечно, они также используют пользовательский агент браузера, но это было легко подделать.

Вот вопрос .js: http://pastebin.com/f56fd608d. Код, отвечающий за обнаружение браузера, находится вверху. Есть ли способ изменить файл .js перед запуском сайта или что-то подобное, чтобы я мог отменить проверку?

Использование консоли JavaScript дает:

>navigator.platform
Linux i686

Очевидно, я изменил пользовательский агент браузера, но navigator.platform, похоже, не принимает его значение от пользовательского агента.

Может быть, кто-то знает, как изменить значение, возвращаемое navigator.platform, потому что я ненавижу запускать Windows под VirtualBox, чтобы использовать этот сайт.

EDIT: Это может представлять интерес, поскольку пользователям Linux может быть искусственно отказано в доступе к веб-сайтам, и они ничего не могут с этим поделать.

Ответы [ 6 ]

17 голосов
/ 30 января 2010
var fakePlatformGetter = function () {
  return "your fake platform";
};
if (Object.defineProperty) {
  Object.defineProperty(navigator, "platform", {
    get: fakePlatformGetter
  });
} else if (Object.prototype.__defineGetter__) {
  navigator.__defineGetter__("platform", fakePlatformGetter);
}
14 голосов
/ 30 января 2010

Поскольку вы не можете напрямую установить navigator.platform, вам нужно быть хитрым - создайте объект, который ведет себя как navigator, замените его platform, затем установите navigator на него.

var fake_navigator = {};

for (var i in navigator) {
  fake_navigator[i] =  navigator[i];
}

fake_navigator.platform = 'MyOS';

navigator = fake_navigator;

Если вы выполните этот код до загрузки документа (используя GreaseMonkey, расширение или расширение Chrome), то на странице будет отображаться navigator.platform как "MyOS".

Примечание: проверено только в Chrome.

4 голосов
/ 17 марта 2010

about: config -> general.platform.override

3 голосов
/ 30 января 2010

Для браузера на основе Mozilla GreaseSpot / фрагменты кода # Перехват свойств браузера демонстрирует, как это можно сделать. Этот код может быть введен из скрипта GreaseMonkey .

1 голос
/ 17 августа 2016

При условии, что используемый вами браузер поддерживает Object.defineProperty() (вероятно, поддерживает), более современный способ достижения той же цели заключается в следующем:

Object.defineProperty(navigator, 'platform', {
  value: 'my custom value',
  configurable: true // necessary to change value more than once
});

Это позволяет вам установить любое желаемое значение, а также изменять его столько раз, сколько вы хотите, без необходимости перезагрузки страницы.

0 голосов
/ 30 января 2010

Попытка изменить это свойство (в любое время) в Firefox приводит к:

Ошибка: установка свойства, которое имеет только геттер

Исходный файл: index.html

Линия: 1

Так что я думаю, тебе будет тяжело.

Я бы попытался связаться с автором для получения исправления.

...