javascript - Chrome 用户脚本是否与 Greasemonkey 脚本一样与全局命名空间分开?

标签 javascript google-chrome greasemonkey anonymous-function userscripts

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

Chrome 用户脚本是否也会发生同样的情况?

最佳答案

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

但是,更重要的是,Greasemonkey 脚本通常1 包裹在XPCNativeWrapper 中沙盒,而谷歌浏览器将用户脚本转换为扩展,they operate in an arena that Google calls an "isolated world" 2.

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

请注意:

  1. 如果您直接将代码注入(inject)页面(创建一个 <script> 标记),那么页面的 JS 可以看到该代码。
  2. 如果您使用 unsafeWindow ,那么该页面理论上可以跟随它返回并获得略微提升的特权。

风险非常低,而且我还没能在野外找到任何记录在案的漏洞。

~~~
最重要的是,脚本在两种浏览器中的隔离程度不同。 (而且不仅仅是通过匿名函数包装。)

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

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




1 截至 Greasemonkey version 1.0 (August 24, 2012),沙箱由the @grant directive控制.如果脚本以(或默认为)@grant none 运行,则不使用沙箱。该脚本仅在私有(private)范围内运行,而正常的 GM_ , API 函数将不起作用。

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

.

关于javascript - Chrome 用户脚本是否与 Greasemonkey 脚本一样与全局命名空间分开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6617361/

相关文章:

javascript - HTML - 单击按钮会导致列表因未知原因滚动到顶部

javascript - 如何使用 Firebug 查找 CSS 属性并使用 Javascript 更改它

javascript - Bootstrap UL 上的动态文本框 - 无法键入

javascript - 如何使用 JSDOM 加载本地 JavaScript 文件?

javascript - 为什么我的输入标签在获取后立即失去焦点?

php - 根据另一个下拉列表填充下拉列表的最佳和最简单方法是什么

javascript - 使用 javascript 在 2 个 google chrome 进程(选项卡)之间进行通信

php - Chrome 添加 "-, attachment"到下载的文件

javascript - 如何使用 GM_xmlhttpRequest 提交到基本的外部表单页面?

google-chrome - 为 Opera、Safari 和 chrome 配置 NTLM