リンクをピックアップする

今回はWebサイト制作時に便利な拡張スクリプトを作成します。Lunascapeの拡張スクリプトはタブウィンドウに表示されているページ内容にアクセスできます。そこで、ページ内のリンクのプロトコル(http, ftp, mailto, file)をチェックするスクリプトを作成してみます。

Lunascapeの拡張スクリプト作成の環境構築はこちらの記事をご覧ください

Lunascapeではタブウィンドウ内に表示されている内容に関してはDOM関連の命令を使って操作できるというのは前回説明しました。拡張スクリプトではページ内容の読み出しだけでなく、改変することも可能です。このため、file:で始まるリンク先があればスタイルシートを変更して分かりやすくハイライトすることもできます。また、ページ内にあるすべてのリンクをピックアップしてクリップボードにコピーすることもできます。これはマイクロソフトのJScriptがサポートしている範囲であれば、ほとんどのものが動作すると言えます。

ページ内容を自由に操作できるというのはセキュリティ面で注意しなければならないこともありますが、拡張スクリプトを自作し自分で使用する範囲であれば問題はないでしょう。Web上で配布されている拡張スクリプトで怪しいものは使わないようにしましょう。

プロトコルチェック

最初にfile:で始まるリンクがあるかどうか調べます。表示されているページのドキュメント情報を取得する部分に関しては前回の説明を参照してください。リンクはaタグのhref属性に書かれています。これはgetElementsByTagName("a")で取得したaタグのhref属性を読み出せばよいことになります。file:の文字列があるかどうか調べるにはindexOf()を使います。

パラメータに調べたい文字列を指定します。今回は"file:"を指定します。indexOf()には2番目のパラメータもあり、これは文字列の検索開始位置を指定します。省略すると文字列の先頭から検索を行います。文字列が見つかれば文字列の最初の位置をインデックス番号で返します。文字列が見つからなければ-1を返します。

以下のスクリプト001ではfile:で始まるリンクの個数をカウントし、ダイアログに表示します。

file:で始まるリンクがなかった場合

file:で始まるリンクが見つかった場合

スクリプト001

function OnClick(){
    // リンクのプロトコルをチェック
    var idDocument = Lunascape.GetDocumentID(Lunascape.ActiveIndex);
    var doc = Lunascape.GetDocumentObject(idDocument);
    var aTag = doc.getElementsByTagName("a");
    var count = 0;
    for(var i=0; i<aTag.length; i++){
        if (aTag[i].href.indexOf("file:") > -1){
            count = count + 1;
        }
    }
    if (count > 0){
        Lunascape.MessageBox("file:で始まるリンクが"+count+"個ありました");
    }else{
        Lunascape.MessageBox("file:で始まるリンクはありませんでした");
    }
}