以下脚本将 false
记录到控制台 . 有谁知道它带来了什么或带来了什么好处?
从简短的一瞥到Greasemonkey 's source code I couldn't找到任何修改 Object
的东西 . 同时查看 Object
很难看到任何有意义的差异,所有函数仍然是本机代码 .
// ==UserScript==
// @name test
// @namespace test
// @include *
// @grant none
// ==/UserScript==
console.log(window.Object == Object)
(在Greasemonkey和Firefox上测试,不确定Scriptish和Chrome,虽然欢迎任何实验!) .
[注意:这个问题与 {a: 2} != {a: 2}
的问题无关,请在你投票之前阅读问题本身而不只是看一眼 Headers ,谢谢!] .
1 回答
这是Mozilla当前沙箱流程的副作用 . 即使在
@grant none
模式下,Greasemonkey也会使用Components.utils.Sandbox沙箱脚本 - 仅关闭Xrays并在false
处留下wantExportHelpers
.所以,你的
window.Object == Object
相当于window.Object == this.Object
.但是:在Greasemonkey脚本中,
this
(root / global this)始终是Sandbox
对象,而不是Window
.Firefox可能有充分的理由像这样克隆
Object
,但我找不到任何参考说法 .无论
@grant
设置如何, Chrome+Tampermonkey does not do this 和window.Object == Object
对于Tampermonkey脚本都是如此 .Chrome也不会以同样的方式进行沙盒处理 .