在执行代码技术之前等待页面加载的用户脚本?

我正在编写一个Greasemonkey用户脚本,并希望在页面完全完成加载时执行特定代码,因为它返回我想要显示的div计数。

问题是,这个特定的页面有时在所有内容加载之前需要一点时间。

我试过了,文档和包装器。但是,似乎没有一个对我有用,尽管我可能应用错了。$(function() { });$(window).load(function(){ });

我能做的最好的事情就是使用一个有效的方法,尽管它并不总是可靠的。setTimeout(function() { }, 600);

在 Greasemonkey 中使用的最佳技术是什么,以确保在页面完成加载时将执行特定代码?


答案 1

Greasemonkey(通常)没有jQuery。所以常见的方法是使用

window.addEventListener('load', function() {
    // your code here
}, false);

在你的用户脚本中


答案 2

这是一个常见的问题,正如你所说,等待页面加载是不够的 - 因为AJAX可以并且确实在那之后很长一段时间内改变事情。

对于这些情况,有一个标准的(ish)健壮实用程序。它是 waitForKeyElements() 实用程序

像这样使用它:

// ==UserScript==
// @name     _Wait for delayed or AJAX page load
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @require  https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant    GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a major design
    change introduced in GM 1.0.
    It restores the sandbox.
*/

waitForKeyElements ("YOUR_jQUERY_SELECTOR", actionFunction);

function actionFunction (jNode) {
    //-- DO WHAT YOU WANT TO THE TARGETED ELEMENTS HERE.
    jNode.css ("background", "yellow"); // example
}

提供目标页面的确切详细信息,以提供更具体的示例。