首页 文章

window.Object!= greasemonkey脚本的对象

提问于
浏览
3

以下脚本将 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 回答

  • 3

    这是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 thiswindow.Object == Object 对于Tampermonkey脚本都是如此 .

    Chrome也不会以同样的方式进行沙盒处理 .

相关问题