了解Greasemonkey如何运行用户脚本

时间:2012-01-07 18:52:29

标签: javascript greasemonkey

我正在学习Greasemonkey,希望对网页进行一些改进。

我认为我已经很好地掌握了JavaScript,但是我不明白在文档的呈现中在什么时候执行Greasemonkey用户脚本。

例如,如果文档中本身存在JavaScript,则会向页面插入一些元素。我希望我的Greasemonkey脚本只在JS完成后运行。

假设这是我尝试使用Greasemonkey修改的文档

<html>
 <script>
   //insert a button with id="mybutton"
 </script>
</html>

我想在运行Greasemonkey脚本之前完成<script>代码,因为我想改变它的背景颜色。

1 个答案:

答案 0 :(得分:24)

默认情况下为Greasemonkey runs at the DOMContentLoaded event。这意味着一切都将在页面中,除了可能大图像和一些javascripts添加的东西(在load事件或AJAX-in内容中触发的脚本)。

如果您想等到加载大型媒体并运行“onload”脚本,请使用:

window.addEventListener ("load", Greasemonkey_main, false);

function Greasemonkey_main () {

    //***** PUT YOUR GREASEMONKEY CODE HERE.
}

不要像其他人所建议的那样使用 unsafeWindow.onload = function(){ ... }window.onload = function() { /* logic here */ }These are not only poor practice/won't work in GM,但unsafeWindow在这种情况下是不必要的安全风险。



但是,处理JS添加的内容:

由于您表示您关注的节点是通过javascript添加的,因此等待load事件通常无效。 JS可以随时添加,删除或编辑节点。

在这种情况下,最好的方法是轮询您感兴趣的元素("#mybutton")。请参阅this answer to "Fire Greasemonkey script on AJAX request"