ところが、もう1つ問題があります。スクリプト003の説明でも書きましたが、Hilight()は単語のハイライト表示と通常表示を交互に繰り返すため、タブウィンドウによっては全くハイライト表示されない場面もでてきます。インデックス番号が奇数番目のタブウィンドウならハイライト表示されるが、偶数番目ならハイライト表示されない、といった現象です。

そこで、タブウィンドウが奇数番目の場合は再度Hilight()を実行するようにします。奇数かどうかを調べる方法はいくつかありますが、1との剰余(割り算のあまり)を求めます。割り算のあまりが1なら奇数、0なら偶数です。

これだけでは、常に最後のタブウィンドウがアクティブになってしまいます。そこで、最初にアクティブになっているタブウィンドウのインデックス番号を変数に入れておき、最後に戻すようにします。実際のプログラムはスクリプト004になります。

拡張スクリプトのAPIでは強制的にハイライト表示するメソッドや設定がないので、ハイライト表示の回数によって機能しない場合もあります。ここらへんはAPI側で改良して欲しいところです。

図10 ハイライトさせたい単語を入力

図11 他のタブウィンドウ内でも指定した単語がハイライト表示される(Wikipedia)

図12 他のタブウィンドウ内でも指定した単語がハイライト表示される(マイクロソフト)

図13 他のタブウィンドウ内でも指定した単語がハイライト表示される(Yahoo!JAPAN)

図14 他のタブウィンドウ内でも指定した単語がハイライト表示される(マイコミジャーナル)

スクリプト004

function OnClick(){
    // 他のタブウィンドウでも単語をハイライトする
    var saveIndex = Lunascape.ActiveIndex;
    var word = Lunascape.InputBox("単語をいれてください","Windows");
    for(var i=0; i<Lunascape.GetCount(); i++){
        var idDocument = Lunascape.GetDocumentID(i);
        Lunascape.ActiveIndex = i;
        Lunascape.Hilight(idDocument, word);
        if (i % 1){
            Lunascape.Hilight(idDocument, word);
        }
    }
    Lunascape.ActiveIndex = saveIndex;
}