如何让您的用户脚本处理尚不存在的函数和元素?

时间:2013-12-06 12:18:52

标签: javascript userscripts

在为各种网站编写用户脚本时,我经常遇到处理执行时尚不存在的元素或JS函数的问题。我想知道如何获得这些功能或元素 一个明显的解决方案是setTimeout,但这非常不优雅。我还尝试了各种事件,例如DOMContentLoadedwindow.onload,但我经常发现这些事件仍然太早,因为之后动态生成/加载了内容和代码。

2 个答案:

答案 0 :(得分:1)

确保您加载的任何内容都会发出一个事件,您可以将其挂钩。

如果您正在加载脚本文件,则可以挂钩onload事件。如果您进行AJAX调用,可以挂钩onreadystatechange事件。

这些是一些有用的原生事件。

您还可以使用Promises制作更多自定义事件。

var modules = {/* */};
var foo = modules.load("foo"); // returns a promise
foo.done(function (foo_module) {
    // we now have the foo-module
});

requirejs可能值得一看,只是为了看看他们是如何做的。

至于承诺,这​​是一个很好的阅读:What’s so great about JavaScript Promises?

答案 1 :(得分:0)

在得出结论之前,确保你没有做错事。比如,请记住Chrome中的用户脚本是沙箱,并且您需要跳过一两圈甚至可以访问目标页面上的代码。对于小脚本,我建议使用“Location Hack”。 https://stackoverflow.com/a/5006952/125938