我想使用一个小的greasemonkey脚本延迟一组特定的网页。基本上,如果正在加载的网站是一组页面的一部分,那么我想延迟页面加载的时间。例如如果正在加载的页面是“http://www.a.com/","http://www.a.com/b”等,那么我想将负载延迟30秒。
答案 0 :(得分:2)
假设Dushara的评论是正确的:
“请参阅xkcd.com/862海报想要的内容。(将鼠标悬停在图像上以查看推理情况。)事实上,我在搜索完全相同的东西时发现了这个问题。”
然后在Greasemonkey中无法做到这一点。原因是GM在页面加载后触发(除了任何慢速图片或AJAX调用)。所以用户会看到页面,然后它会闪烁30秒......但是,只有在快速眼球看到太多之后。 ;)击>
更新:现在可以在Greasemonkey中使用@run-at document-start
指令 - 2011年8月添加。请参阅this answer for an example。
请注意,XKCD的创造者使用良好的,老式的意志力来实现他的“简单的30秒延迟”。来自his blog entry:
“很多人都问过我在今天漫画的替代文字中用来实施限制的系统。
...
我做了一个规则,一旦我完成任务,或者对它感到厌倦,我就不得不关掉电脑。“
另见:"Browser extension (or other software) to delay page load" - 现在有链接到人们为此创建的正确扩展程序。
答案 1 :(得分:1)
如果你的理由是你需要一些时间来加载某些元素,然后在greasemonkey看到它被加载之前,你总是可以设置一个eventlistener,当你点击而不是加载然后当你准备好时,会激活你的函数你只需点击页面上的某个功能即可解雇你。 addEventListener(“click”,function,false)
如果您只是想找到一种方法来使页面在一段时间后自动加载,那么使用imacros会有更好的运气。
答案 2 :(得分:1)
存在使用叠加层执行此操作的Greasemonkey脚本: Script #1(在一个网站上运行)
我曾尝试对其进行修改,并提出了一些非常粗糙的,它与多个网站列表配合使用:Script #2。我不再使用该附加组件,因为该脚本在某些网站上具有奇怪的副作用,并可能影响性能。我相信其他人可以做得更好,但是如果你想亲自尝试或尝试修改它,它就在那里。
对于任何不熟悉Greasemonkey的人来说,它是一个Firefox附加组件,允许您使用少量javascript片段修改网站,您可以自己编写或从库中安装。要使用这些脚本中的任何一个,您当然需要安装Greasemonkey附加组件(https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/)(由于缺少代码而未链接 - 任何有编辑权限的人请随时链接)。
答案 3 :(得分:0)
如前所述,GreaseMonkey脚本在DOMContentLoaded上执行,因此在页面加载后。
但是,实际上你可以创建一个覆盖<div>
一定的秒数,它会产生相同的效果。
以下是由@Jonathan链接的用户脚本的一点改进版本(实际上,我是独立编写的;)
(function()
{
var timeout = 30;
var timeElapsed = timeout;
function hide()
{
document.documentElement.style.overflow = "hidden";
var newdiv = document.createElement('div');
newdiv.id = "leechblocker";
newdiv.style.width = "100%";
newdiv.style.minHeight = "100%";
newdiv.style.position = "fixed";
newdiv.style.top = "0px";
newdiv.style.left = "0px";
newdiv.style.zIndex = 10000;
newdiv.style.backgroundColor = "white";
newdiv.style.display = "block";
newdiv.style.overflow = "hidden";
newdiv.style.textAlign = "center";
newdiv.style.paddingTop = (window.innerHeight/2-10)+"px";
newdiv.innerHTML = "Wait <span id='counter'>"+timeElapsed+"</span> seconds...";
document.body.appendChild(newdiv);
}
function updateCounter()
{
var counter = document.getElementById("counter");
timeElapsed--;
counter.innerHTML = timeElapsed;
}
function unhide()
{
document.documentElement.style.overflow = "auto";
var leechDiv = document.getElementById("leechblocker");
leechDiv.parentNode.removeChild(leechDiv);
}
hide();
window.setInterval(updateCounter,1000);
window.setTimeout(unhide,timeout*1000);
}());