Firefox Javascript Actionsアンカー作成スクリプト

↓を参考に作りました。
http://moewe.xrea.jp/log/2004_09.html#d20040926

// Firefox Javascript Actions アンカー作成スクリプト
// 2005/10/21 kkkkkkkk
function escapeHTML(str) {
  return str.replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/&/g,'&amp;').replace(/\"/g,'&quot;');
}

function buildAnchorTag(url, target) {
  return '<a href="' + url + '">' + target + '</a>';
}

function makeanchor(){
  var page_title = escapeHTML(window.document.title);
  var page_url = escapeHTML(window.document.location.href);

  if (page_title == '') page_title = page_url;

  var con = _jsaCScript.context;

  if (con.isTextSelected) {
    var selection = escapeHTML(document.getSelection());
  }

  if (con.onLink) {
    var link_url = escapeHTML(con.link.href);
    var link_text = escapeHTML(con.link.text);
  }

  if (con.onLink && con.isTextSelected) {
    return buildAnchorTag(link_url, selection);
  } else if (con.isTextSelected) {
    return buildAnchorTag(page_url, selection);
  } else if (con.onLink) {
    return buildAnchorTag(link_url, link_text);
  } else {
    return buildAnchorTag(page_url, page_title);
  }
}

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);