操纵/改变窗口.屏幕属性值

manipulate/change the window.screen property values

本文关键字:属性 屏幕 窗口 改变 操纵      更新时间:2023-09-26

问候亲爱的社区,

我的目标是欺骗屏幕对象的属性,但是我不能只是通过使用覆盖属性:window.screen[property] = number;Object.defineProperty(...)因为这些属性只读

因此,我想克隆或重新创建屏幕对象,操作属性,然后覆盖整个窗口。屏幕对象。

我尝试

:

var clone = Object.create(Screen.prototype);
Object.assign(clone, window.screen);
console.log(clone);

原型克隆得很好,但是的属性不行。在试图用Object.getOwnPropertyNamesObject.keys函数获得它们之后,它们也不起作用(这里的例子),它们必须在原型中。所以我试着这样做:

var clone = Object.create(Screen.prototype);
Object.assign(clone,Object.getPrototypeOf(window.screen));
console.log(clone);

输出错误"TypeError: 'get availWidth'在一个没有实现Screen接口的对象上调用"

使用for-in循环进行迭代并对其赋值也会输出相同的错误。

所以看起来我必须实现界面屏幕,即使我不确定我的计划是否在那之后工作。也许有一个更简单的解决办法。

其他想法:

我可以将完整的屏幕对象分配为原型(如Object.create(screen)),然后在对象上设置自己的属性,但原始值仍然可读。

也许我也可以通过使用Screen(...)接口创建一个对象?

谢谢你的帮助和想法!

似乎这很容易通过Object.defineProperty()方法的帮助,只要属性是可配置的。

var exampleProperty = 'colorDepth',
    exampleValue = 55;
    
console.log("before:", screen[exampleProperty])    
Object.defineProperty(screen, exampleProperty, {
  // add descriptor properties here if desired
  value: exampleValue
});
console.log("after:", screen[exampleProperty])