Posted at

Google Chrome拡張でContent Scriptsを注入するタイミングを制御

More than 3 years have passed since last update.


翻訳

manifest.jsonrun_atプロパティの説明の翻訳しました。


run_atプロパティ

必須ではありません。jsプロパティのファイルを注入するタイミングを制御します。

設定値は次の三つです


  • document_start

  • document_end

  • document_idle(初期値)


値ごとの注入のタイミング


document_start

cssプロパティのファイルの読込後、DOMが構築されscriptsが実行される前です。


document_end

DOMが構築された直後、画像やフレームなどのサブリソースが読込まれる前です。


document_idle

ブラウザが決定します。document_endから、window.onloadイベントまでの間の任意のタイミングです。

実際のタイミングはdocumentの複雑さによって変わります。

また、documentの読込みに掛かる時間、documentを読込みに最適化しているかにも左右されます。


document_idleとwindow.onloadイベントに関する注意

document_idleでは、content scriptswindow.onloadイベントを受信しない可能性があります。イベント発火後にcontent scriptsを実行しているかもしれません。

一般に、document_idleでは、window.onloadイベントを待つ必要はありません。DOM構築完了後の実行を保証しています。

もし、厳密にwindow.onloadの後にcontent scriptsを実行するには、イベントがすでに発火したかチェックします。document.readyStateプロパティを使います。


使い分け

基本的にdocument_idleで十分しょう。初期値なので、run_atプロパティは設定不要です。

巨大な画像を読み込むことなど、サブリソースの読込みに時間が掛かるとわかっている場合は、document_endを設定します。

サブリソースの読込み前に実行されます。ユーザーの待ち時間が気持ち減ります。

document_startは、どういうときに使うのでしょうか?

知っている人がいたら教えてください。