DOM インスペクタの内部構造

この記事は翻訳作業中です。

DOMインスペクタには3つの主要な面があります。 あなたが最も慣れ親しんでいるのは、inspector.xulベースの主UIです。これは、DOM Inspectorが明示的にサポートしているアプリケーション(オーバーレイを介して配置されたメニューアイテム)からCtrl + Shift + I(またはCmd + Shift + I)を押すと表示される2ペインのインスペクタです。

DOM Inspector primary UI inspecting browser.xul

DOMインスペクタのプライマリUIに加えて、若干異なる(オブジェクトインスペクタとSeaMonkeyで使用されるDOMインスペクタのサイドバー)2つのトップレベルのインスペクタがあります。最初に、inspector.xulとそのエントリポイントに焦点を当て、後でこれらの他のインスペクタがどのように異なるかを説明するために焦点を絞ります。

高水準の観点からのDOMインスペクタ

DOMインスペクタのプライマリUIは、いくつかのツールバーとパネルセットで構成されています。パネルセットには2つのパネルが含まれています。 一方のパネルは検査された文書の変更に反応し、他方のパネルは第1パネルの選択の変化に反応する。これらはそれぞれドキュメントパネルとオブジェクトパネルです。(内部的には、パネルは「ペイン」と呼ばれることがありますが、パネルセットは常に「パネルセット」と呼ばれます)。

パネルの目的は利用可能なビューアを管理することです。各パネルの上部には、ビューアリストから表示するビューア、現在アクティブなビューアの名前を表示するラベル、ビューア固有のコマンドを発行するための別のメニューボタンを選択できるメニューボタンが含まれているツールバーがあります 。

ビューアは動的にロードされます。 パネルをあるビューアから別のビューアに切り替えると、古いビューアが破棄され、新しいビューアがその場所にロードされます。このようにして、パネルセットとパネルはフレームセットとフレームのように機能します。各パネルには実際には匿名のbrowserが含まれており、個々のビューアはブラウザに読み込まれた別々のドキュメントに存在するため、この比較は非常に適切です。 この分離により、視聴者はXUL、CSS、またはJSの衝突を心配することなく、ビューアのXULを独自のドキュメントで定義し、独自のスコープでロードすることができます。 これのもう1つの便利な結果は、適切に設定された開発プロファイルを使用すると、現在のビューアから戻って戻るだけで、開発の変更の影響をほとんど見ることができるということです。

ビューアが書かれている方法についてこれを知っているので、私たちはDOMインスペクタのソースがどのように整理されているかを見ることができます。

ソースコードの構成

DOM インスペクタリポジトリの最上位ディレクトリの内容は次のようになります

  • base/
    • js/
      • inspector-cmdline.js
      • Makefile.in
  • build/
    • install.js
    • Makefile.in
  • resources/
    • content/
    • locale/
    • skin/
    • Makefile.in
  • install.rdf
  • jar.mn
  • Makefile.in
  • makefiles.sh

ほとんどすべての興味深いものは resources/content/ にあります。その内容は次のようになります。

  • extensions/
  • jsutil/
  • prefs/
  • res/
  • tests/
  • viewers/
  • browserOverlay.xul
  • commandOverlay.xul
  • editingOverlay.xul
  • Flasher.js
  • hooks.js
  • inspector.css
  • inspector.js
  • inspectorOverlay.xul
  • inspector.xml
  • inspector.xul
  • keysetOverlay.xul
  • object.js
  • object.xul
  • popupOverlay.xul
  • sidebar.js
  • sidebar.xul
  • statusbarOverlay.xul
  • tasksOverlay-cz.xul
  • tasksOverlay-ff.xul
  • tasksOverlay-mobile.xul
  • tasksOverlay-sb.xul
  • tasksOverlay-tb.xul
  • tasksOverlay.xul
  • toolboxOverlay.xul
  • utils.js
  • venkmanOverlay.xul
  • ViewerRegistry.js

オーバーレイ

オーバーレイがたくさんあることに気付くでしょう。 いくつかのオーバーレイは、ホスト統合オーバーレイとして記述することも、共有構造オーバーレイとして記述することもできます。

ホスト統合オーバーレイ

DOM Inspectorは汎用の拡張機能であり、Mozillaツールキットホストアプリケーションでの使用に適しています。 しかし、DOM Inspectorをホストアプリケーションで使用するには、メニュー項目やCtrl + Shift + I(またはCmd + Shiftなどの省略可能なキーボードショートカットなど)でDOM Inspectorを起動する方法が必要です + I)。 ホストアプリケーションはこれらの機能を提供する必要があります(通常、DOM Inspectorにはアプリケーションもバンドルされています)。または、DOM Inspectorは、ホスト統合オーバーレイで独自のメニュー項目とキーボードショートカットを提供することによって明示的にサポートする必要があります。

DOM インスペクタは、独自のホスト統合オーバーレイを提供することにより、いくつかのMozillaプロジェクトアプリケーションを明示的にサポートしています。 これらのオーバーレイは次のとおりです。

  • browserOverlay.xul
  • tasksOverlay-cz.xul
  • tasksOverlay-ff.xul
  • tasksOverlay-mobile.xul
  • tasksOverlay-sb.xul
  • tasksOverlay-tb.xul
  • tasksOverlay.xul
  • venkmanOverlay.xul
  • prefs/prefsOverlay.xul

chrome manifest をさらに調べると、DOM インスペクタはそのプライマリウィンドウで条件付きオーバーレイも使用することがわかります。

overlay chrome://inspector/content/inspector.xul chrome://communicator/content/utilityOverlay.xul application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}
overlay chrome://inspector/content/inspector.xul chrome://communicator/content/tasksOverlay.xul application={92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}
overlay chrome://inspector/content/inspector.xul chrome://browser/content/baseMenuOverlay.xul application={ec8030f7-c20a-464f-9b0e-13a3a9e97384}

これらのホスト提供のオーバーレイにより、DOM インスペクタはホストアプリケーションと同様のルックアンドフィールを採用することができます。(上記はそれぞれ SeaMonkey と Firefox)

resources/contents/ ディレクトリには、ホスト統合オーバーレイのカテゴリに該当しないオーバーレイがいくつかあります。これは、DOM インスペクタも共有オーバーレイを使用して独自のUIを構築するためです。

共有構造オーバーレイ

DOM インスペクタのメインのUIであるinspector.xulの内容を見てみると、目に見える要素はほとんどないことがわかります。この記事の執筆時点では、空のmenubarと空のtoolbarを含むtoolboxと、空のvboxがあります。

  <toolbox id="tbxInsToolbox">
    <menubar id="mbrInspectorMain"/>
    <toolbar id="tbInspectorPrimary"/>
  </toolbox>

  <vbox id="bxInspectorMain" flex="1"/>

ここで定義されているメニュー、ツールバー項目などはありません。keycommandset など、表示されない要素のほとんどは inspector.xul で定義されていません。これらは一連のオーバーレイから取り込まれ、DOMインスペクタの UI を定義する XUL を個別のユニットに編成することができます。inspector.xul 自体は主な DOM インスペクタウィンドウの基本的な構造とレイアウトを説明するスケルトンであり、ほとんどのコンテンツはオーバーレイによって追加されたままになっています。

モジュラーオーバーレイを使用すると、すべてのオーバーレイが複数のコンシューマによって共有されるわけではありませんが、一般的なXULをDOM インスペクタのUIを構成するさまざまなドキュメントで共有することもできます。単一コンシューマオーバレイは、組織専用です。

場合によっては、オーバーレイは他のオーバーレイによってオーバーレイされます。ホスト統合に使用されるオーバーレイを無視して、オーバーレイをオーバーレイするファイルにオーバーレイを子として接続することによって得られるツリー構造を想像すると、特定のファイルのホストに依存しないオーバーレイツリーを視覚化できます。inspector.xul用に拡張されたホストに依存しないオーバーレイツリーがあります:

(ビューアのサブディレクトリ (viewers/dom およびviewers/styleRules) からのオーバーレイは、オーバーレイされたファイル内の xul-overlay 処理命令を使用して明示的にインポートされるのではなく、DOM インスペクタのクロムマニフェストで overlay ディレクティブ の結果としてロードされることに注意してください。)

inspectorOverlay.xul

これは、依存関係を含む最上位のインスペクタが必要とするスクリプトをインポートします。 さらに、DOMインスペクタウィンドウの本体、つまり、パネルセット、ドキュメントおよびオブジェクトビューアパネル、およびドキュメントブラウザペインのコンテンツを定義します。 (ブラウザー・ペインは、文書およびオブジェクト・パネルが存在するという意味ではビューアー・パネルではなく、パネル・セットに関して上で定義したパネルの種類であり、ここでは「ペイン」がブラウザー・ペインに関して緩やかな意味で使用されています 一般的なUIフィクスチャについて説明します)。

toolboxOverlay.xul

このオーバーレイは、ツールバーのボタン、ロケーションバー、および「Inspect」ボタンを含むインスペクタツールボックスに表示されます。 toolboxOverlay.xulは、メニュー自体の内容を定義することなく、メニューバーの構造も定義します。

popupOverlay.xul

このオーバーレイは、メニューバーのメニューの静的構造の大部分を定義していますが、いくつかの例外があります。明らかな理由から、動的メニューの内容はここでは定義されていません。動的メニューには、[ファイル]メニューの[インスペクション]メニュー([コンテンツドキュメントの検査]および[クロムドキュメントの検査])ポップアップ、[表示]メニューの[ドキュメントビューア]および[オブジェクトビューア]メニューがあります。そのビューアのポップアップオーバーレイ(resources / content / viewer / dom / popupOverlay.xul)によって、DOMノードビューア(「Blink Selected Element」など)のみに影響を与える「表示」メニューの設定メニューが追加されます。 DOMメニュービューア以外の他のビューアはこれらの機能をサポートしていないので、[編集]メニューの[検索]メニューと[クリックして要素を選択]メニュー項目でも同じことが当てはまります。

他の編集メニュー項目は、複数のビューアのコンテキストメニューでも使用されます。そのため、ここでは menuitems の ID だけが参照され、 editingOverlay.xul から完全な定義がインポートされます。コンテキストメニューにこれらのメニューアイテムの1つまたは複数を含むビューアは、同じプラクティスに従います。

インスペクタメニューに使用されるツールチップ(文書のタイトル(存在する場合)とそのメニューアイテムのURIを示すために使用されるもの)もここで定義されます。

commandOverlay.xul
外部 command 要素に委譲する popupOverlay.xul で提供されるメニュー項目には、ここで定義されたコマンドがあります。
keysetOverlay.xul
いくつかの popupOverlay.xul 提供のメニュー項目には、ここで定義された key があります。この記事の執筆時点では、編集メニュー項目に対応するキーはすべて正当な理由でeditingOverlayに存在します。
statusbarOverlay.xul
これは、DOM インスペクタのステータスバーの内容を定義します。 DOM インスペクタにはステータスバーがありませんので、これはまったく役に立たないものです。

ドキュメントのタグと貢献者

このページの貢献者: silverskyvicto
最終更新者: silverskyvicto,