我正在编写一个隐私浏览器扩展程序。我需要做的一件事就是欺骗window.navigator对象及其成功为主窗口对象设置的属性。我还需要为页面上的每个iframe.contentWindow欺骗window.navigator对象。我想我可以使用self.frames然后遍历那些欺骗,但是我的代码运行后创建的帧会怎样但是当我的代码运行时不存在var myFrame = document.createElement(“iframe”); ????


我希望所有导航器对象实例都是主窗口中的实例,以及每个iframe中创建的实例都是欺骗性的。为了让您了解我想要做什么,这不会影响每个iframe中的导航器。


 Object.defineProperty(HTMLIFrameElement.prototype) .contentWindow,“navigator”,{
 configurable:true,
 enumerable:true,
 value:“some false navigator object”
});



 也许是因为它实际上是window.HTMLIFrameElement.prototype而那我错了?


任何想法?
如果您不明白这个问题,请询问更多细节。

答案 0 :(得分:2)
iframe中的全局对象(window
)不是从HTMLIFrameElement
的原型派生的。原型的contentWindow
属性只是一个访问器,它为您提供了另一个全局的跨领域代理。
要替换实际navigator
属性,您需要在每个iframe中使用{all_frames: true, run_at: document-start}
运行脚本。