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

问题描述 投票:69回答:7

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

问题是,在加载所有内容之前,该特定页面有时会花费一些时间。

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

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

在Greasemonkey中使用什么最好的技术来确保在页面完成加载后将执行特定的代码?

javascript jquery greasemonkey tampermonkey
7个回答
61
投票

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

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

在用户脚本中]


52
投票

这是一个普遍的问题,正如您已经说过的那样,仅等待页面加载是不够的-因为AJAX可以并且确实会在很长一段时间后改变事情。


29
投票

从Greasemonkey 3.6开始(2015年11月20日),元数据键// ==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 } 支持新值@run-at。只需将其放在您的Greasemonkey脚本的元数据块中:


13
投票

documentation中包装我的脚本对我来说从来没有失败。


8
投票

waitForKeyElements("elementtowaitfor", functiontocall)很好,但是我想为AJAX问题提供另一种解决方案,它更现代,更优雅。由于他的脚本还使用Brock's answer进行定期检查(300毫秒),因此无法立即响应。


5
投票

如果要操纵节点,例如获得节点的价值或更改样式,可以使用此功能等待这些节点


2
投票

要检测XHR是否完成了在网页中的加载,它将触发某些功能。我是从icourse163_enhance中获得的,它确实有效。

© www.soinside.com 2019 - 2024. All rights reserved.