javascript – Chrome用户脚本是否与Greasemonkey脚本等全局命名空间分开?

我知道Greasemonkey脚本会自动包装在以某种方式隔离的匿名函数中,以防止它们与页面中的脚本冲突.

Chrome用户脚本也会出现同样的情况吗?

最佳答案
是的,Greasemonkey脚本是normally wrapped in an anonymous function.而且,Chrome userscripts apparently are too.

但更重要的是,Greasemonkey脚本通常包含在XPCNativeWrapper沙箱中,而Google Chrome将用户脚本转换为扩展名,而they operate in an arena that Google calls an “isolated world”2.

因此,出于安全考虑,您不需要将脚本代码包装在匿名函数中,它们已经受到保护.

请注意:

>如果您将代码直接注入页面(创建< script>标记),那么页面的JS就可以看到该代码.
>如果您使用unsafeWindow,那么理论上该页面可以遵循它并获得稍微提升的权限.

风险非常低,我无法在野外找到任何记录的漏洞.

~~~
最重要的是,两个浏览器中的脚本都被隔离到不同程度. (而不仅仅是包含在匿名函数中.)

在Firefox中,Greasemonkey有a nice set of privileged features可用.虽然Chrome中的用户脚本受到更多限制.

但是,通过使用Tampermonkey extension,GM的大部分功能都恢复到了Chrome.

  

1截至Greasemonkey version 1.0(2012年8月24日),沙箱由the @grant directive控制.如果脚本以(或默认)@grant none运行,则不使用沙箱.该脚本仅在私有范围内运行,而普通的GM_,API函数将无法运行.

2这听起来不是比一些令人讨厌的沙箱更大/更好吗? (^_^)

.

转载注明原文:javascript – Chrome用户脚本是否与Greasemonkey脚本等全局命名空间分开? - 代码日志