【问题标题】:Check (from bookmarklet) whether page is loaded?检查(从书签)页面是否已加载?
【发布时间】:2010-11-24 18:54:58
【问题描述】:

我正在编写一个书签 javascript。这里的问题是用户可以在某些页面完成加载之前和之后调用它。我想确保仅在页面完成加载后才运行 sript。该怎么做?

【问题讨论】:

  • 到目前为止,没有人理解这个问题。 他想知道文档是否已经完成加载。
  • 大声笑,你这个混蛋,谢谢你的反对...文档准备好确定文档何时完成加载...您认为它还能做什么...泡茶?跨度>
  • @CrazyDart 虽然我不同意你的语言,但我同意这种观点。如果 80% 的回答者都以同样的方式回答,那么这个问题并没有被问得很清楚。也许这个问题需要投反对票?您投反对票的所有受访者都回答了这个问题=>我想确保仅在页面完成加载后才运行 sript。页面加载完成后调用事件 onload。我认为这是一个有效的答案。再次感谢您的反对。

标签: javascript bookmarklet


【解决方案1】:

检查文档是否已加载的一种方法是检查document.readyState 属性。 IE、Firefox 3.6+、Webkit 和 Opera 都支持它。

if (document.readyState === "complete") {
    // do sth
}

另一件事是,如果您想等待文档加载。在这种情况下,您必须监听一些事件,例如文档上的 DOMContentLoaded、窗口上的加载或文档上的 readyStateChange。

【讨论】:

  • 顺便说一句。有些人还检查 (document.readyState === "complete" || document.readyState === "loaded")。不知道是哪个浏览器使用了“loaded”这个值,但一定是老浏览器的兼容性问题。
  • 'loaded' 发生在元素实际添加到 DOM 之前的 'complete' 之前。当我动态添加 script 元素并且无法访问它们的内容时,它搞砸了。
【解决方案2】:

将函数与文档的就绪/加载函数挂钩可确保在加载 DOM 之前无法执行代码中的任何位置

<html>
<body onload="documentLoad()">
    <script type="text/javascript">

    function documentLoad() {
        alert("Document is ready now.");
    }

    </script>
</body>
</html>

如果你想使用 jQuery,你可以使用一种非常简单的方法将你的所有代码附加到 ready 函数。

$(document).ready(function() {
    // All code in here - will trigger when DOM is loaded.
}

这里有一个更短的速记方法,使用 jQuery 来实现同样的效果。

$(function(){
    // All code in here - will trigger when DOM is loaded.
});

【讨论】:

    【解决方案3】:
    <body onload="start()">
    </body>
    

    在函数 start 中保证 DOM 被加载。

    【讨论】:

      【解决方案4】:
      var firstLoad = true;
      $(document).ready(function(){
          if ( firstLoad ){
              firstLoad=false;
              //your code to run once
          }
      });
      

      【讨论】:

        【解决方案5】:

        这里的大多数答案都是回答如何将函数附加到文档就绪函数,这不是 davidgale 所要求的......

        document 对象的属性为readyState,当它完成加载后,该属性将设置为"complete"

        <html>
        <body>
        
           <script type="text/javascript">
        
           function someFunction() {
              // Called various times throughout page's life.
        
              if(document.readyState == "complete") {
                 // Perform DOM actions - will only attempt after DOM is loaded.
              }
           }
           </script>
        
        </body>
        </html>
        

        【讨论】:

        • 来自 OP:我想确保仅在页面加载完成后才运行 sript。听起来这正是他要问的。
        猜你喜欢
        • 2010-10-05
        • 2018-01-08
        • 1970-01-01
        • 1970-01-01
        • 2014-08-27
        • 2011-10-28
        • 2015-04-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多