如何让Greasemonkey脚本在@ run-at document-start和@ run-at document-end运行?

Aze*_*edo 14 javascript greasemonkey startup

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

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

我宁愿不使用jQuery.

我尝试了这个onload活动,但它没有用.我认为如果文件还没有,那么事件就无法附上了?

window.document.onload = function(e){ 
    alert("document.onload" ); 
}
Run Code Online (Sandbox Code Playgroud)

Bro*_*ams 25

你想要的事件是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() );
Run Code Online (Sandbox Code Playgroud)

典型结果:

"==> 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
Run Code Online (Sandbox Code Playgroud)