下面的脚本将false记录到控制台。有人知道这会带来什么好处吗?
简单地看一下Greasemonkey的源代码,我就找不到任何修改Object的东西。此外,在Object中很难看到任何有意义的区别,所有函数仍然是本机代码。
// ==UserScript==
// @name test
// @namespace test
// @include *
// @grant none
// ==/UserScript==
console.log(window.Object == Object)(在Greasemonkey和Firefox上测试,不确定Scriptish和Chrome,尽管任何实验都欢迎!)
注:这个问题与{a: 2} != {a: 2}的问题无关,请先阅读问题本身,不要仅仅看一下标题,然后再投任何接近的票,谢谢!
发布于 2017-01-13 09:10:36
这是Mozilla当前沙箱处理的一个副作用。即使在@grant none模式下,Greasemonkey沙箱脚本也使用Components.utils.Sandbox --只在关闭X射线的情况下使用,而wantExportHelpers则离开false。
因此,您的window.Object == Object等同于window.Object == this.Object。
但是:在Greasemonkey脚本中,this (根/全局消息)始终是Sandbox对象,而不是Window。
火狐可能有一个很好的理由来克隆这样的Object,但我找不到任何引用说得那么多。
Chrome+Tampermonkey不这样做,不管@grant设置如何,对于和window.Object == Object都是正确的。
Chrome也不以同样的方式做沙箱。
https://stackoverflow.com/questions/41629334
复制相似问题