用户脚本和Greasemonkey:调用网站的 JavaScript 函数 [英] UserScripts & Greasemonkey: calling a website's JavaScript functions

查看:26
本文介绍了用户脚本和Greasemonkey:调用网站的 JavaScript 函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为 Firefox & 创建一个 UserScript 扩展Chrome 和我正在尝试使用网站 JavaScript 中的一些代码,例如:

函数:myFunction(){返回 Grooveshark.playNextSong();}

问题是当我测试这段代码时,Grooveshark 是一个空引用.

我知道还有其他人这样做了:

参见 BetterGrooveshark

但我不知道为什么我的简单扩展不能调用 Grooveshark 的 JavaScript 函数.

我是否需要将我的脚本附加"到文档中才能使其工作?:document.document.body.appendChild(script);

Greasemonkey 不是已经注入我的扩展 JavaScript 了吗?有人可以帮我澄清一下吗.

谢谢.

解决方案

背景

<块引用>

Greasemonkey 不是已经注入我的扩展 JavaScript 了吗?有人可以帮我澄清一下吗.

Greasemonkey 在沙箱 中执行您的脚本,这是一个受限制的环境,没有直接访问页面中的 JavaScript.早期版本的 Greasemonkey 将脚本直接注入页面,但这引入了严重的安全漏洞.在旧模型中,脚本以浏览器 chrome 的提升权限运行,这允许远程页面使用一些 聪明的 JavaScript.这很糟糕:

<块引用>

Greasemonkey 脚本包含它们自己的 GM_xmlhttprequest 对象,与普通的 xmlttprequest 对象不同,该对象可以访问自己计算机的任何本地文件或向任意站点发出任意请求,而无需考虑通常适用于 xmlhttprequest 的同源策略.(来源)

当您今天从 Greasemonkey 脚本访问 window 对象时,您得到的是一个 间接引用实际 window 属性的包装器对象.这个包装器对象可以安全地修改,但有重要限制.unsafeWindow(的简写)提供了对实际窗口对象的访问window.wrappedJSObject).使用 unsafeWindow 会重新打开 Greasemonkey 的所有原始安全问题,并且在 Chrome 中不可用.应尽可能避免.

好消息:至少有两种方法可以安全地使用 Greasemonkey 的新安全模型.

脚本注入

既然 Greasemonkey 脚本可以安全地访问 DOM,那么注入

登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆