開いているタブ全部のタイトルとURLをクリップボードにコピーするuserChrome.jsスクリプト「Copy All URLs」

調べ物をしていて、ちょっと気になるwebサイトがいくつか見つかった時に、素早くそのURLをメモする為のスクリプトです。
目の前にあるいくつかのサイトを、人にメールしたり、後で読もうとちょっとメモして置きたい時などに、便利です。


今開いているタブ一つ分だけなら、アドレスバーからコピーも出来ますし、htmlのアンカータグ化してくれるアドオンやスクリプトもありますが、複数のタブをとなると、とても面倒になります。


ミーティングの前にちょっと下調べしておいて、参考サイトを事前にみんなにメールしておいたり、取り急ぎで調べたものでブックマークに入れる程ではないのにといった時に、毎回煩わしさを感じていたので作ってみました。

特徴

  1. userChrome.jsスクリプト
    1. Firefox/2.0.0.18で動作確認
  2. 一つのウィンドウにある全てのタブのURLとタイトルをクリップボードにコピーする。
  3. 簡単なテンプレートになっているので、スクリプトを編集すればhtml形式やFourm Code形式でのコピーも可能。
    • 使用可能な変数
      1. %title%
      2. %url%
  4. userChrome.jsスクリプトはあまり作り慣れてないので、利用される場合は自己責任で。
    1. 間違ってるとことかのつっこみ歓迎です。

使い方

  1. タブの上で右クリック
  2. コンテキストメニューの「Copy All URLs」をクリック
    • [text] Copy All URLs:テキスト形式
    • [html] Copy All URLs:html形式
  3. エディタなどにペースト

CopyAllURLs.uc.js

はてなダイアリーでファイルのアップロード方法が分からなかったので、ソースコードをそのまま貼り付け。

// ==UserScript==
// @name         Copy All URLs
// @namespace    http://d.hatena.ne.jp/kanonji/
// @description  copy all URLs on a window to your clipboard used from the context menu on a tab.
// @include      main
// @author       kanonji
// @version      0.1.20081205
// @homepage     http://d.hatena.ne.jp/kanonji/20081205/1228462464
// ==/UserScript==

(function() {
	var templates = {
		'html':{
			'header':'<html><head></head><body><dl>\n',
			'body':'<dt>%title%</dt><dd><a href="%url%" target="_blank">%url%</a></dd>\n',
			'footer':'</dl></body></html>'
		},
		'text':{
			'header':'',
			'body':'%title%\n%url%\n\n',
			'footer':''
		}
	};
	var htmlEscape = function(s) {
		s = s.replace(/&/g, "&amp;");
		s = s.replace(/>/g, "&gt;");
		s = s.replace(/</g, "&lt;");
		s = s.replace(/"/g, "&quot;");
		return s;
	};
	var getTabs = function(){
		var tabNodes = document.popupNode.parentNode.childNodes;
		var tabs = new Array;
		for (i=0;i<tabNodes.length;i++){
			tabs.push({'title':tabNodes[i].label, 'url':gBrowser.getBrowserForTab(tabNodes[i]).contentWindow.location.href});
		}
		return tabs;
	};
	var formOutput = function(templateId, tabs){
		var string = new String;
		var template = templates[templateId];
		string += template.header;
		for(i=0;i<tabs.length;i++){
			string += template.body.replace(/%title%/g, htmlEscape(tabs[i].title)).replace(/%url%/g, htmlEscape(tabs[i].url));
		}
		return string += template.footer;
	}
	var putClipboard = function(string){
		Cc["@mozilla.org/widget/clipboardhelper;1"]
		.getService(Ci.nsIClipboardHelper)
		.copyString(string);
		dump("[save tabs]"+"copied to Clipboard\n");
	}
	var main = function(templateId){
		var tabs = getTabs();
		var output = formOutput(templateId, tabs);
		putClipboard(output);
	};
	var menuitem1 = document.createElement("menuitem");
	menuitem1.setAttribute("label", "[text] Copy All URLs");
	menuitem1.addEventListener("command", function() { main('text'); }, false);
	var menuitem2 = document.createElement("menuitem");
	menuitem2.setAttribute("label", "[html] Copy All URLs");
	menuitem2.addEventListener("command", function() { main('html'); }, false);
	setTimeout(function() {
		gBrowser.mStrip.childNodes[1].appendChild(document.createElement("menuseparator"));
		gBrowser.mStrip.childNodes[1].appendChild(menuitem1);
		gBrowser.mStrip.childNodes[1].appendChild(menuitem2);
	}, 0);
})();