我知道 Greasemonkey 脚本会自动包装在以某种方式隔离的匿名函数中,以防止它们与页面中的脚本冲突。
Chrome 用户脚本也会发生同样的情况吗?
我知道 Greasemonkey 脚本会自动包装在以某种方式隔离的匿名函数中,以防止它们与页面中的脚本冲突。
Chrome 用户脚本也会发生同样的情况吗?
是的,Greasemonkey 脚本通常包装在一个匿名函数中。而且,Chrome 用户脚本显然也是如此。
但是,更重要的是,Greasemonkey 脚本通常1包装在XPCNativeWrapper沙箱中,而 Google Chrome 将用户脚本转换为扩展程序,并且它们在 Google 称之为“孤立世界”的竞技场中运行2。
因此,出于安全目的,您无需将脚本代码包装在匿名函数中,它们已经受到保护。
请注意:
<script>
标签),那么页面的 JS 可以看到该代码。unsafeWindow
,则该页面理论上可以跟随它并获得略微提升的权限。风险非常低,我无法在野外找到任何记录在案的漏洞利用。
~~~
底线,脚本在两个浏览器中被不同程度地隔离。(而不仅仅是被包裹在匿名函数中。)
Greasemonkey在 Firefox 中提供了一组不错的特权功能。虽然 Chrome 中的用户脚本受到更多限制。
然而,通过使用Tampermonkey 扩展,GM 的大部分功能都恢复到 Chrome 。
1从Greasemonkey 版本 1.0(2012 年 8 月 24 日)开始,沙箱由指令@grant
控制。如果脚本使用 (或默认为) 运行@grant none
,则不使用沙箱。该脚本仅在私有范围内运行,正常GM_
的 API 函数将不起作用。
2这听起来不是比一些讨厌的沙盒更大/更好吗?(^_^)
.