对于我的Greasemonkey脚本,有一部分代码应在页面加载之前运行(@run-at document-start),另一部分代码应在文档加载之后运行(@run-at document-end)。
这可能吗?

  • 脚本的第一部分运行
  • 页面已加载,文档已准备就绪
  • 脚本的第二部分运行

  • 我宁愿不为此使用jQuery。

    我尝试了onload事件,但没有成功。我认为如果文档不存在, Activity 将无法附加?
    window.document.onload = function(e){
        alert("document.onload" );
    }
    

    最佳答案

    您想要的事件是DOMContentLoaded。另外,这不是如何使用load事件。

    这是一个完整的脚本,演示了各种触发时间:

    // ==UserScript==
    // @name        _Show page start event timing
    // @include     http://YOUR_SERVER.COM/YOUR_PATH/*
    // @run-at      document-start
    // ==/UserScript==
    console.log ("==> Script start.", new Date() );
    
    // 1ST PART OF SCRIPT RUN GOES HERE.
    console.log ("==> 1st part of script run.", new Date() );
    
    document.addEventListener ("DOMContentLoaded", DOM_ContentReady);
    window.addEventListener ("load", pageFullyLoaded);
    
    function DOM_ContentReady () {
        // 2ND PART OF SCRIPT RUN GOES HERE.
        // This is the equivalent of @run-at document-end
        console.log ("==> 2nd part of script run.", new Date() );
    }
    
    function pageFullyLoaded () {
        console.log ("==> Page is fully loaded, including images.", new Date() );
    }
    
    console.log ("==> Script end.", new Date() );
    

    典型结果:
    "==> Script start."                           2014-10-09T01:53:49.323Z
    "==> 1st part of script run."                 2014-10-09T01:53:49.323Z
    "==> Script end."                             2014-10-09T01:53:49.323Z
    "==> 2nd part of script run."                 2014-10-09T01:53:49.385Z
    "==> Page is fully loaded, including images." 2014-10-09T01:53:49.487Z
    

    07-24 09:52
    查看更多