用户脚本&Gresemonkey:调用网站的JavaScript函数

发布时间:2022-07-21 / 作者:清心寡欲
本文介绍了用户脚本&;amp;Gresemonkey:调用网站的JavaScript函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

function: myFunction(){
    return  Grooveshark.playNextSong();
}

问题是,当我测试此代码时,Grooveshark是空引用。

我知道还有其他人也这么做过:

see BetterGrooveshark

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

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

Gresemonkey不是已经注入了我的扩展吗?有人能帮我澄清一下吗?

谢谢。

推荐答案

背景

Gresemonkey不是已经注入了我的扩展吗?有人能帮我澄清一下吗?

Gresemonkey在sandbox中执行您的脚本,这是一个受限环境,无法直接访问页面中的JavaScript。早期版本的Gresemonkey直接将脚本注入页面,但这会带来严重的安全漏洞。在旧的模型中,脚本以浏览器Chrome的提升权限运行,这允许远程页面使用一些clever JavaScript访问Gresemonkey的内置函数。这很糟糕:

Gresemonkey脚本包含它们自己的GM_XMLHttpRequest对象,与普通的XMLHttRequest对象不同,该对象可以访问计算机上的任何本地文件或向任意站点发出任意请求,而不考虑通常应用于XMLHttpRequest的同源策略。(source)

当您现在从Gresemonkey脚本访问window对象时,您得到的是间接引用实际window的属性的wrapper object。此包装对象可以安全地修改,但具有important limitations。对实际窗口对象的访问由unsafeWindow(window.wrappedJSObject的缩写)提供。使用unsafeWindow会重新打开Gresemonkey的所有原始安全问题,在Chrome中不可用。应尽可能避免。

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

脚本注入

既然Gresemonkey脚本可以安全地访问DOM,那么将inject a