我正在学习Greasemonkey,希望对网页进行一些改进。
我认为我已经很好地掌握了JavaScript,但是我不明白在文档的呈现中在什么时候执行Greasemonkey用户脚本。
例如,如果文档中本身存在JavaScript,则会向页面插入一些元素。我希望我的Greasemonkey脚本只在JS完成后运行。
假设这是我尝试使用Greasemonkey修改的文档
<html>
<script>
//insert a button with id="mybutton"
</script>
</html>
我想在运行Greasemonkey脚本之前完成<script>
代码,因为我想改变它的背景颜色。
答案 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
在这种情况下是不必要的安全风险。
由于您表示您关注的节点是通过javascript添加的,因此等待load
事件通常无效。 JS可以随时添加,删除或编辑节点。
在这种情况下,最好的方法是轮询您感兴趣的元素("#mybutton"
)。请参阅this answer to "Fire Greasemonkey script on AJAX request"。