Sylera2 用 アンカー作成スクリプト
説明
このスクリプトは、開いているページへのアンカータグを作成し、クリップボードにコピーするスクリプトです。僕が愛用している オートアンカー の Sylera2 版だと思ってくれればわかりやすいかと(機能はずいぶん劣りますが)。右クリックなどから使用できます。
アンカーを作成する部分は パソコン遊戯 さんの Sylera2 用右クリック拡張スクリプト の MakeAnchor.js から、クリップボードにコピーする部分は CrescentSoft の オートアンカー FireFox版 からそれぞれ拝借してます。僕は二つのスクリプトを合成しただけのパクリ野郎です。
機能説明
普通にページ右クリックから呼び出すと、タイトルをアンカー文字にしたアンカータグ。文字列を選択して呼び出すと、選択文字列をアンカー文字にしたアンカータグを作成し、クリップボードにコピーします。
SyleraApiの実装により、アンカーの文字列と URL が取得できるようになりました。よって、Sylera 2.2.3 以降のバージョンでしか動きません。また、2.2.3 以降のバージョンでも動かない場合は、一度 Sylera を終了(常駐もはずす)させて、components フォルダ内の compreg.dat を削除してから起動し直してみて下さい。
使用方法
- 下記のスクリプトをコピーし、拡張子を js にして Sylera2 のプラグインフォルダに入れます。
- そして Sylera2 の [カスタマイズ] から、右クリックの部分に
- アンカー作成 = [item:anchor.js:]
などと入れ、Sylera2 を再起動。
- あとは右クリックから使うだけです。
page_title、page_url、Select_word、link_url、link_text がそれぞれページタイトル、URL、選択文字列、アンカー URL、アンカー文字列に置換されますので、お好きな様にアンカーの形を変えてください。ちなみに、文字列は「'」で囲って下さい。
スクリプト
function escapeHTML(str) {
return str.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/\"/g,'"');
}
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);