web-dev-qa-db-ja.com

@ run-atdocument-startと@ run-at document-endの両方でGreasemonkeyスクリプトを実行するにはどうすればよいですか?

私のGreasemonkeyスクリプトの場合、ページが読み込まれる前に実行する必要があるコードの一部があります(@run-at document-start)およびドキュメントのロード後に実行する必要があるコードの別の部分(@run-at document-end)。
これは可能ですか?

  • スクリプト実行の最初の部分
  • ページが読み込まれ、ドキュメントの準備ができました
  • スクリプト実行の2番目の部分

これにはjQueryを使用したくありません。

onloadイベントを試しましたが、機能しませんでした。資料がない場合は添付できないと思いますか?

window.document.onload = function(e){ 
    alert("document.onload" ); 
}
15
Azevedo

必要なイベントは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
25
Brock Adams