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