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

Aco*_*orn 5 javascript greasemonkey google-chrome anonymous-function userscripts

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

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

Bro*_*ams 7

是的,Greasemonkey脚本通常包含在匿名函数中.而且,Chrome用户脚本显然也是如此.

但是,更重要的是,Greasemonkey脚本是通常1包裹在XPCNativeWrapper沙箱中,而谷歌浏览器转换成userscripts扩展,以及他们在,谷歌称之为"隔离的世界"的舞台工作2.

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

请注意:

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

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

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

在Firefox中,Greasemonkey提供了一组很好的特权功能.虽然Chrome中的用户脚本受到更多限制.

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




1个作为Greasemonkey的版本1.0(2012年8月24日),沙箱通过受控@grant指令.如果脚本以(或默认值)运行,@grant none则不使用沙箱.该脚本仅在私有范围内运行,而普通的GM_API函数将无法运行.

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

.