2011-02-18 129 views
1

我想使用一个小的greasemonkey脚本来延迟特定的一组网页。基本上,如果加载的网站是一组页面的一部分,那么我想延迟页面加载的时间。例如如果正在加载的页面是“http://www.a.com/","http://www.a.com/b”等,那么我想延迟30秒的负载。特定页面页面的Javascript页面加载延迟

+1

你能解释这一点进一步?你正试图让你的页面加载30秒?为什么? – 2011-02-18 15:41:39

+0

问题不明确。 “延迟负载”是什么意思?延迟加载的开始,只是咀嚼浏览器周期额外的30秒,或什么?你希望通过这样的延迟完成什么? – 2011-02-18 23:57:23

回答

2

假设和酒廊的评论是正确的:。

“的海报想要什么看xkcd.com/862(将鼠标悬停在图片看推理)事实上,我发现这个问题,而谷歌搜索了整整一样的东西。”

然后这在Greasemonkey中是不可能的。原因是GM在页面加载后触发(除了任何慢速图片或AJAX调用)。因此,用户会看到该页面,然后它会闪烁30秒空白......但是,只有在快速眼球才会看到太多。 ;)

更新:这是现在可以在Greasemonkey的(与@run-at document-start指令 - 增加了2011年8月)。见this answer for an example


请注意,XKCD的创造者使用良好的老式意志力来实现他的“简单的30秒延迟”。从his blog entry

“很多人都问我,因为我用来实现在今天的漫画的Alt-文本限制系统
...
我做了一个规则,尽快。我完成了任何任务,或厌倦了它,我不得不关闭我的电脑。“

参见:"Browser extension (or other software) to delay page load" - 现在有链接到人们对于这创造适当的扩展。

1

如果你的推理是你需要一些时间让一些元素在加载之前加载,那么你可以设置一个eventlistener,当你点击而不是在加载时触发你的函数,然后当你准备好有功能发射你只需点击页面的某个地方。 addEventListener(“click”,function,false)

如果你只是想找一个方法来让页面在设定的时间内自动加载,那么使用imacros会有更好的运气。

1

存在着使用覆盖要做到这一点Greasemonkey脚本: Script #1(工作在一个网站上)

我曾试图改变这一点,并与多个网站的列表,使用起来有点很粗糙上来:Script #2。我不再使用附加组件,因为脚本在某些网站上有奇怪的副作用,并可能影响性能。我相信别人可以做得更好,但如果你想自己尝试或尝试修改它,它就在那里。

对于任何不熟悉Greasemonkey的人来说,它是一个Firefox附加组件,允许您使用JavaScript的小片段修改网站,您可以自己编写网站或从库中安装。要使用这些脚本中的任何一个,您当然需要安装Greasemonkey插件(https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/)(由于缺少代表,任何具有编辑权限的人请随时链接)。

0

如上所述,GreaseMonkey脚本在DOMContentLoaded上执行,所以在页面加载后。

但是,事实上,您可以创建一个覆盖<div>一段时间,它会有同样的效果。

下面是@Jonathan链接userscripts的一点改进版(其实,我自己独立写的;)

(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); 
}());