jQuery:强制执行document.ready()调用的执行顺序

我正在开发一个包含多个代码块的代码库,在document.ready()(jQuery)上设置一些行为。 有没有办法强制在任何其他块之前调用一个特定的块?

背景:我需要在自动化测试环境中检测JS错误,因此我需要在任何其他JS代码执行之前开始记录JS错误的代码。

document.ready()回调按照它们的注册顺序调用。 如果先注册测试回调,则会先调用它。

此外,如果您的测试代码实际上不需要操作DOM,那么您可以在解析代码时运行它,而不是等到DOM准备就绪,这将在调用其他document.ready()回调之前运行。 或者,也许您可​​以立即运行部分测试代码,并仅将使用DOM的部分推迟到document.ready()

另一个想法是(仅出于测试目的)你可以运行一个略微修改的jQuery版本,它为document.ready()添加了一个标志,当传递并设置为true表示首先调用该函数或者你可以添加一个新的方法document.readyFirst()会先调用你的函数。 这将涉及jQuery中document.ready()处理代码的微小更改。

正如@jfriend00所提到的那样, ready callbacks are called in the order they were registered.

所以即使这个代码块在开头调用,你也可以在其中设置另一个回调,这样它就会在最后执行。

 jQuery(document).ready(function(){ jQuery(document).ready(function(){ // This block will be executed after all ready calls. }); }); 

您应该能够使用holdReady来执行此操作。 只要在准备好的事件之前包含它,您就可以运行自己的代码,然后触发其他就绪事件。

您可以在DOMReady中执行日志记录启动代码,并在load中执行其他初始化。 或者您可以创建自己的初始化管理器,首先调用您的日志记录开始代码,然后调用所有其他初始化回调(假设那些是向您的经理而不是jQuery注册的,除非您想破解jQuery并从那里提取它们,我不知道建议)。

我正在尝试做类似的事情,我正在加载一堆具有.ready()函数的polyfill,但我也有我自己的.ready()页面,我需要先执行,尽管polyfill已加载到标题中。

我通过很早就开始(在jQuery加载之后)从数组中执行函数,找到了一个很好的方法。 因为它在源代码中非常早,所以首先执行.ready()。 在页面的下方,我可以向数组添加函数,因此它们都可以在任何其他.ready()之前执行。

我把它包装在一个.beforeReady()函数中,然后把它作为jQuery-Before-Ready放在GitHub上,给任何感兴趣的人。 https://github.com/aim12340/jQuery-Before-Ready