Sylera2 用 アンカー作成スクリプト

説明

このスクリプトは、開いているページへのアンカータグを作成し、クリップボードにコピーするスクリプトです。僕が愛用している オートアンカーSylera2 版だと思ってくれればわかりやすいかと(機能はずいぶん劣りますが)。右クリックなどから使用できます。

アンカーを作成する部分は パソコン遊戯 さんの Sylera2 用右クリック拡張スクリプト の MakeAnchor.js から、クリップボードにコピーする部分は CrescentSoftオートアンカー FireFox版 からそれぞれ拝借してます。僕は二つのスクリプトを合成しただけのパクリ野郎です。

機能説明

普通にページ右クリックから呼び出すと、タイトルをアンカー文字にしたアンカータグ。文字列を選択して呼び出すと、選択文字列をアンカー文字にしたアンカータグを作成し、クリップボードにコピーします。

SyleraApiの実装により、アンカーの文字列と URL が取得できるようになりました。よって、Sylera 2.2.3 以降のバージョンでしか動きません。また、2.2.3 以降のバージョンでも動かない場合は、一度 Sylera を終了(常駐もはずす)させて、components フォルダ内の compreg.dat を削除してから起動し直してみて下さい。

使用方法

  1. 下記のスクリプトをコピーし、拡張子を js にして Sylera2 のプラグインフォルダに入れます。
  2. そして Sylera2 の [カスタマイズ] から、右クリックの部分に
    • アンカー作成 = [item:anchor.js:]
    などと入れ、Sylera2 を再起動。
  3. あとは右クリックから使うだけです。

page_title、page_url、Select_word、link_url、link_text がそれぞれページタイトル、URL、選択文字列、アンカー URL、アンカー文字列に置換されますので、お好きな様にアンカーの形を変えてください。ちなみに、文字列は「'」で囲って下さい。

スクリプト

function escapeHTML(str) {
  return str.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/\"/g,'&quot;');
}

function makeanchor(){
  var syleraApi = Components.classes["@mozilla.org/sylera-api;1"].getService(Components.interfaces.nsISyleraAPI);

  var Select_word = escapeHTML(document.getSelection());
  var page_title = escapeHTML(document.title);
  var page_url = escapeHTML(document.URL);
  var top_url = escapeHTML(top.document.URL);
  var top_title = escapeHTML(top.document.title);
  
  if( top_url != page_url ){
    page_url = top_url;
    page_title = top_title;
  }
  
  if(page_title == ''){
    page_title = page_url;
  }

  var anode = syleraApi.getActiveDOMNode();
  
  if (anode.nodeName =='A') {
    var link_url = escapeHTML(anode.href);
    var link_text = escapeHTML(anode.innerHTML);
    if(Select_word == ''){//アンカー右クリック
      var anchor_txt = '<a href="' + link_url + '">' + link_text + '</a>';
    }else{//文字列選択してアンカー右クリック
      var anchor_txt = '<a href="' + link_url + '" title="' + link_text + '">' + Select_word + '</a>';
    }
  }else{
    if(Select_word == ''){//普通の右クリック
      var anchor_txt = '<a href="' + page_url + '">' + page_title + '</a>';
    }else{//文字列選択時
      var anchor_txt = '<a href="' + page_url + '" title="' + page_title + '">' + Select_word + '</a>';
    }
  }
  return anchor_txt;
}

var template=makeanchor();

var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
str.data = template;

var trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
trans.addDataFlavor("text/unicode");
trans.setTransferData("text/unicode", str, template.length * 2);

var clip = Components.classes["@mozilla.org/widget/clipboard;1"].createInstance(Components.interfaces.nsIClipboard);
clip.emptyClipboard(clip.kGlobalClipboard);
clip.setData(trans, null, clip.kGlobalClipboard);