window.screen.availHeight
和window.screen.availWidth
值让 Web 应用程序知道我的实际屏幕分辨率,而我并不总是希望它们知道。我可以为这些属性设置自己的值吗?我对 Firefox 和 Chrome 的解决方案都很感兴趣。
答案1
有趣的问题。理论上可以使用函数覆盖window.screen.availHeight
和属性。window.screen.availWidth
Object.defineProperty
尝试以下文件:
测试.html:
<html>
<head>
<script>
window.alert("Window resolution before overwrite is " + window.screen.availWidth + " x " + window.screen.availHeight);
Object.defineProperty(window.screen, "availWidth", { get: function(){return 0; }});
Object.defineProperty(window.screen, "availHeight", { get: function(){return 0; }});
</script>
</head>
<body>
<script>
window.alert("Window resolution after overwrite is " + window.screen.availWidth + " x " + window.screen.availHeight);
</script>
</body>
</html>
但是,对于您关于在所有网站上实现此目的的通用方法的问题,我只能提供部分答案。
在 Firefox 上使用 UserScripts(通过 Greasemonkey),以下脚本具有预期的效果(要使用,请安装 Greasemonkey 插件,然后重新启动 Firefox 并将脚本拖到 Firefox 窗口上)。
Hide_screen_resolution.user.js:
// ==UserScript==
// @name Hide screen resolution
// @description This script hides access to the screen resolution through window.screen.availHeight and window.screen.availWidth values.
// @include *
// @run-at document-start
// ==/UserScript==
Object.defineProperty(window.screen, "availWidth", { get: function(){return 0; }});
Object.defineProperty(window.screen, "availHeight", { get: function(){return 0; }});
现在,如果再次打开 test.html,可以看到覆盖之前的屏幕分辨率已经重置,并提供了所需的结果。
不幸的是,Chrome 不支持在文档加载之前运行这样的代码,因此此 UserScript 在那里不起作用。我发布了这个答案,希望有人能提示 Chrome 中的可能解决方案。