操纵/更改window.screen属性值

时间:2016-09-24 17:21:57

标签: javascript

亲爱的社区问候,

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

因此我想克隆或重新创建屏幕对象,操纵属性然后覆盖整个window.screen对象。

我的尝试:



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




原型克隆良好,但不是属性。 在尝试使用Object.getOwnPropertyNamesObject.keys函数(它们不起作用(example here)后,它们必须在原型中。 所以我尝试了这个:



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




输出错误" TypeError:' get availWidth'调用了一个没有实现界面屏幕的对象。"

使用for-in循环进行迭代并分配它们会输出相同的错误。

所以我似乎必须实现界面屏幕,即使我不确定我的计划是否在此之后工作。也许存在一种更简单的解决方案。

其他想法:

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

也许我也可以通过Screen(...)接口以某种方式创建对象?

感谢您的帮助和想法!

1 个答案:

答案 0 :(得分:0)

只要该属性是可配置的,只需使用 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])