変数の初期化
次はJavaScriptを使ってのプログラミングになります。ここでは、コンテキストメニューを開いた元のWebページから、必要な情報を取得します。ここで取得するのは、コンテキストメニューを開いた元のWebページのデータです。以下の4種類のデータを、それぞれデータのために用意した変数に代入します。
| データ | 変数 |
| 選択している範囲のHTMLタグ付き文字列 | strSelHtml |
| 選択している範囲の文字列 | strSelPlain |
| Webページ全体のHTMLタグ付き文字列 | strAllHtml |
| Webページ全体の文字列 | strAllPlain |
「コンテキストメニュー用ソフト」を作成する場合、多くの場面でこれらのデータは参照されます。この「変数の初期化」では、これらの取得方法を説明していくことにします。
以下、ソースコードです。前の章で作成したscriptタグのエリアに、ソースを追加していくことになります。このプログラムの書き方は、通常のHTMLファイル内に記述するJavaScriptと同じです。
//==== 変数の初期化 ================================================= // var obj = external.menuArguments; // 引数のオブジェクトの参照 var objDoc = obj.document; // 元Webページのドキュメント var objSel = obj.document.selection.createRange(); // 選択範囲 var strSelHtml = objSel.htmlText; // 選択中HTMLテキスト var strSelPlain = objSel.text; // 選択中テキスト var strAllHtml = objDoc.body.innerHTML; // 全体HTMLテキスト var strAllPlain = objDoc.body.innerText; // 全体テキスト
まず、最も重要なのは、external.menuArgumentsというオブジェクトです。コンテキストメニューを開いた元のWebページへのアクセスは、すべてこのオブジェクトを通して行うことになります。最初の行では、このexternal.menuArgumentsを表わす変数として、objを初期化しています。
次に2つのオブジェクトを準備します。「元Webページのドキュメント」であるobj.documentを表わす変数としてobjDocを、「選択範囲」にあたるobj.document.selection.createRange()を表わす変数としてobjSelを初期化します。以降、このobjDoc、objSelという2つの変数を利用して、必要な情報を取得していきます。
「選択している範囲のHTMLタグ付き文字列」はobjSel.htmlTextで取得できます。また、「選択している範囲の文字列」はobjSel.textで取得できます。
最後にWebページ全体の文字列も取得しておきます。「Webページ全体のHTMLタグ付き文字列」はobjDoc.body.innerHTMLで取得できます。また、「Webページ全体の文字列」はobjDoc.body.innerTextで取得できます。選択している範囲から文字列を取得するのとは値の取り方が違うので、若干注意が必要です。
「選択範囲の表示」関数
ここでは、先ほど取得した文字列をテキストエリアに表示させます。bodyタグのonLoad属性で、このViewSel()関数は呼び出されて実行されます。onLoad属性は、タグで囲まれた領域が読み込み終わった際に実行されるスクリプトを記述する部分です。
//=================================================================== //======================================== // // 選択範囲 // //======================================== // 引数 :なし // 返り値:なし // 仕様 :フォームに、取得した値を表示する。 function ViewSel () { //==== フォームに表示 ============================================= // f.SelHtml.value = strSelHtml; // 選択中HTMLテキスト f.SelPlain.value = strSelPlain; // 選択中テキスト f.AllHtml.value = strAllHtml; // 全体HTMLテキスト f.AllPlain.value = strAllPlain; // 全体テキスト }
フォームfの、各テキストエリアのvalueに、「変数の初期化」で取得した文字列を代入しています。
