【问题标题】:Javascript page load delay of specific set of pages特定页面集的 Javascript 页面加载延迟
【发布时间】:2012-05-28 07:54:25
【问题描述】:

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

【问题讨论】:

  • 您能再解释一下吗?你想让你的页面加载 30 秒?为什么?
  • 问题不清楚。 “延迟负载”是什么意思?延迟加载开始,只需将浏览器周期多咀嚼 30 秒,还是什么?您希望通过这样的延迟完成什么?
  • @Brock Adams。请参阅xkcd.com/862 了解发布者想要的内容。 (将鼠标悬停在图像上以查看推理)。事实上,我在搜索完全相同的内容时发现了这个问题。
  • @Dushara,似乎是合理的。很遗憾你不是OP,我会支持你。无论如何,请参阅下面的答案。

标签: javascript greasemonkey


【解决方案1】:

假设 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"——它现在具有指向人们为此创建的适当扩展的链接。

【讨论】:

    【解决方案2】:

    如果您的理由是您需要一些时间来加载某些元素,然后再将其视为已加载,那么您始终可以设置一个事件侦听器,当您单击而不是加载时触发您的函数,然后当您准备好该功能启动,您只需单击某处的页面。 addEventListener("click", function, false)

    如果您只是在寻找一种方法来使页面在设定的时间后自动加载,那么使用 imacros 会更好。

    【讨论】:

      【解决方案3】:

      存在使用覆盖来执行此操作的 Greasemonkey 脚本: Script #1(在一个网站上工作)

      我曾尝试对此进行修改,并提出了一些非常粗略的内容,适用于多个网站的列表:Script #2。我不再使用该插件,因为该脚本对某些网站有奇怪的副作用,可能会影响性能。我确信其他人可以做得更好,但如果您想自己尝试或尝试修改它,它就在那里。

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

      【讨论】:

      • overlay.style.position = 'absolute'; 中的绝对值更改为固定,overlay.style.height=... 中的高度更改为 minHeight=100% 并添加document.documentElement.style.overflow = "hidden"; 以防止鼠标中键单击滚动;)
      【解决方案4】:

      如前所述,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);
      }());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多