更改 Chrome、Firefox 或 IE 上的 navigator.platform 以测试操作系统检测代码

2024-05-07

如何在 Chrome、Firefox 或 Internet Explorer(最好是 Chrome)上欺骗 navigator.platform 的值?看起来过去在 Firefox 上是可以实现的,但现在已经不再支持了。

这是为了测试网站上的一些代码,这些代码在条件 JavaScript 检查中运行,该检查测试 navigator.platform 属性。不幸的是,它没有测试很容易更改的 userAgent。

我尝试根据第二篇文章中的建议编写一个简单的 chrome 扩展https://groups.google.com/a/chromium.org/forum/#!topic/chromium-discuss/8cCllrVX4kI https://groups.google.com/a/chromium.org/forum/#!topic/chromium-discuss/8cCllrVX4kI但它不起作用(我包含了我在下面尝试过的代码)。如果我在扩展中执行 console.log(navigator.platform) ,它会根据需要打印出“MacIntel”,但如果我在页面加载后在控制台中输入 navigator.platform ,它会显示“Win32”(即我正在使用的实际操作系统)不想说)。

//navigator_change.js
Object.defineProperty(navigator,"platform", {
  get: function () { return "MacIntel"; },
  set: function (a) {}
 });

//manifest.json
{
    "manifest_version": 2,
    "content_scripts": [ {
        "js":        [ "navigator_change.js" ],
        "matches":   [ "<all_urls>"],
        "run_at":    "document_start"
    } ],
    "converted_from_user_script": true,
    "description":  "Fake navigator.platform",
    "name":         "MacFaker",
    "version":      "1"
}

信用@wOxxOm 和https://stackoverflow.com/a/9517879/4811197 https://stackoverflow.com/a/9517879/4811197- 我将问题中的 navigator_change.js 代码更新为以下内容并且它有效。

var codeToInject = 'Object.defineProperty(navigator,"platform", { \
  get: function () { return "MacIntel"; }, \
  set: function (a) {} \
 });';
var script = document.createElement('script');
script.appendChild(document.createTextNode(codeToInject));
(document.head || document.documentElement).appendChild(script);
script.parentNode.removeChild(script);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改 Chrome、Firefox 或 IE 上的 navigator.platform 以测试操作系统检测代码 的相关文章

随机推荐