我如何才能愚弄一个查看JavaScript对象的站点';导航器&x27;看到我';我不在Windows上?
我试图浏览一个网站,但是,它只能在Windows和Mac下运行,因为他们使用JavaScript中的我如何才能愚弄一个查看JavaScript对象的站点';导航器&x27;看到我';我不在Windows上?,javascript,browser,user-agent,Javascript,Browser,User Agent,我试图浏览一个网站,但是,它只能在Windows和Mac下运行,因为他们使用JavaScript中的navigator.platform来查找我运行的架构。当然,他们也使用浏览器的用户代理,但这很容易被欺骗 下面是有问题的.js:。负责浏览器检测的代码位于顶部。有没有办法在网站运行之前更改.js文件,或者类似的东西,这样我就可以取消检查 使用JavaScript控制台可以产生: >navigator.platform Linux i686 显然,我更改了浏览器的用户代理,但是navigator.
navigator.platform
来查找我运行的架构。当然,他们也使用浏览器的用户代理,但这很容易被欺骗
下面是有问题的.js:。负责浏览器检测的代码位于顶部。有没有办法在网站运行之前更改.js文件,或者类似的东西,这样我就可以取消检查
使用JavaScript控制台可以产生:
>navigator.platform
Linux i686
显然,我更改了浏览器的用户代理,但是navigator.platform
似乎没有从用户代理获取它的值
也许有人知道如何更改由navigator.platform
返回的值,因为我讨厌在VirtualBox下运行Windows来使用此站点
编辑:
这可能令人感兴趣,因为Linux用户可能会被人为拒绝访问网站,对此无能为力。尝试在Firefox中更改此属性(随时)会产生以下结果: 错误:设置只有getter的属性 源文件:index.html 行:1 所以我想你会很难过的
我想尝试一下如何获得修复。对于基于Mozilla的浏览器,演示了如何进行修复。此代码可以从脚本中注入。因为您不能直接设置
导航器。平台
,所以您将不得不偷偷摸摸-创建一个行为类似于导航器
的对象,替换其平台
,然后将导航器
设置为它
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中测试。关于:config->general.platform.override如果您使用的浏览器支持Object.defineProperty()(很可能支持),则实现相同目标的更现代方法如下:
var fakePlatformGetter = function () {
return "your fake platform";
};
if (Object.defineProperty) {
Object.defineProperty(navigator, "platform", {
get: fakePlatformGetter
});
Object.defineProperty(Navigator.prototype, "platform", {
get: fakePlatformGetter
});
} else if (Object.prototype.__defineGetter__) {
navigator.__defineGetter__("platform", fakePlatformGetter);
Navigator.prototype.__defineGetter__("platform", fakePlatformGetter);
}
Object.defineProperty(导航器,“平台”{
值:“我的自定义值”,
可配置:true//需要多次更改值
});
这允许您将其设置为任何自定义值,还允许您在不重新加载页面的情况下更改任意次数。您使用什么浏览器?我使用Chrome和Firefox。两者都不是从用户代理获取平台信息,而是从其他地方获取平台信息。可能是内置的。我会使用Linux下任何可以提供伪造的
导航器的浏览器。平台
Radu:除IE外,所有平台上的所有浏览器都支持\uuuu defineGetter\uuu
。这就是你要找的。它在这里旋转。这看起来很有希望,我来试试。非常感谢。是的,这是鬼鬼祟祟的:)谢谢你的帮助!实际上,您可以替换平台getter。没有平台设置器,因此navigator.platform=…
除了Chrome在所有对象上支持非标准的\uuuu defineGetter\uuu
方法外,什么都不做。Firefox的Pre-Alpha也支持ECMAScript 5的对象。defineProperty
。我可能有偏见(因为这是我的答案),但我更喜欢定义getter。但这也行得通,如果getter方法不存在的话,我也会这么想。这已经不起作用了。页面没有看到它。我使用了另一种方法:navigator;但这也不起作用。任何帮助,请感谢!我想我会从2010年开始安装较旧的Chrome。。但是有一个小小的问题,那就是从哪里得到tampermonkey:)这在Firefox24中已经不存在了。哪个版本允许这样做?