Firefoxアドオン作成 単語をALC英辞郎で開くアドオンを作る

英語サイトを読む際、英単語を翻訳サイトにコピペしながら読んでいくのはめんどい。
調べてみると、Firefoxアドオンはテキストエディタでいじることで作れるとのこと、
単語をマウスで選択->右クリックメニュー「アルク英辞郎で調べる」で
翻訳サイトを開くアドオンを作ってみました。
こちらに置いています。

ファイル構成

○chrome.manifest
○install.rdf
○contentフォルダ
  ├alc_eijiro.js
  └alc_eijiro.xul
3つの○を1つのzipファイルにまとめて固めます。
拡張子を.zipから.xpiに変え、Firefoxにドラッグ&ドロップでインストール出来ます。

chrome.manifest

content alc_eijiro content/
overlay chrome://browser/content/browser.xul chrome://alc_eijiro/content/alc_eijiro.xul

xulの在処を記したファイルという感じですね。

install.rdf

<?xml version="1.0"?>
  <RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:em="http://www.mozilla.org/2004/em-rdf#">

  <Description about="urn:mozilla:install-manifest">
    <em:id>{04d2bb32-d7c0-4ee8-a5b9-f70798dda4f0}</em:id>
    <em:name>SPACE ALC EIJIRO OPEN</em:name>
    <em:version>1.0</em:version>
    <em:description>選択した単語をALC英辞郎で開きます</em:description>
    <em:creator>ロフトくん</em:creator>
    <em:type>2</em:type>

    <em:targetApplication>
      <Description>
        <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
        <em:minVersion>1.0</em:minVersion>
        <em:maxVersion>4.*</em:maxVersion>
      </Description>
    </em:targetApplication>
   </Description>
  </RDF>

いじったのは以下だけです。

・em:id
適当なGUID値にしました。
GUID生成ツールや生成サイトで作成出来ます。
・em:name
アドオンの名前です。アドオン一覧画面に出ます。
・em:version
アドオンのバージョンです。アドオン一覧画面に出ます。
・em:description
アドオンの説明です。アドオン一覧画面に出ます。
・em:creator
作者名です。

alc_eijiro.js

function alc_eijiro(){
	var w = window._content;
	var d = w.document;
	//var txt = '<a href="' + d.location.href + '">' + d.title + '</a>';
	//const CLIPBOARD = Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper);
	//CLIPBOARD.copyString(txt);
	
	var word = d.getSelection();
	if (word == '')
	{
		//選択文字列がない場合はクリップボードを覗く
		var clip = get_clipboard_text();
		if(clip == '')
		{
			var url  = 'http://eow.alc.co.jp/';
		}
		else
		{
			var url  = 'http://eow.alc.co.jp/'+ clip + '/';
		}
	}
	else
	{
		//var url  = 'http://eow.alc.co.jp/' + word + '/UTF-8/?ref=sa';
		var url  = 'http://eow.alc.co.jp/' + word + '/';
	}
	//window.open(url, 'eijiro');
	
	openUILinkIn( url, 'tab');
	//document.getSelection();

}
//const Cc = Components.classes;
//const Ci = Components.interfaces;

function get_clipboard_text() {
// get clipboard text 
	try { 
		var clip = Cc["@mozilla.org/widget/clipboard;1"].createInstance(Ci.nsIClipboard); 
		var trans = Cc["@mozilla.org/widget/transferable;1"].createInstance(Ci.nsITransferable); 
		trans.addDataFlavor("text/unicode"); 
		clip.getData(trans, clip.kGlobalClipboard); 
		var str = new Object();
		var len = new Object(); 
		trans.getTransferData("text/unicode", str, len); 
		if ( str )
		{
			return str.value.QueryInterface(Ci.nsISupportsString).toString(); 
		}
		else
		{
			return;
		}
	}
	catch(ex)
	{ 
		return;
	} 
}

javascriptによる機能の実装です。
右クリックメニューで「アルク英辞郎で調べる」が選択されると呼ばれる関数です。
選択された文字列を取得し、ALCのURLにくっつけてタブで開きます。
window.open(url, ‘eijiro’);だと新規ウィンドウで開かれたので、
openUILinkIn( url, ‘tab’);として新規タブで開くようにしています。

なお、マウス選択された文字列がない場合は、クリップボードに格納された文字列を使います。
英語のPDFファイルを読むときなんかにも使えますね。

alc_eijiro.xul

<?xml version="1.0"?>

<overlay id="alc_eijiro" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

<script type="application/x-javascript" src="chrome://alc_eijiro/content/alc_eijiro.js">
</script>

<keyset id="mainKeyset">
  <key id="alc_eijiro" modifiers="shift" key="U" oncommand="alc_eijiro();"/>
</keyset>

<popup id="contentAreaContextMenu">
  <menuitem id="alc_eijiro" label="アルク英辞郎で調べる" accesskey="U"
  insertafter="context-bookmarkpage" oncommand="alc_eijiro();"/>
</popup>

</overlay>

アドオンの画面デザインの実装です。
右クリックメニューで「アルク英辞郎で調べる」が選択されたら関数alc_eijiroを呼びます。

ちなみに英→日、日→英両方向いけます(ALC 英辞郎が対応しているので)。

以下サイト記事を参考にしました。
http://relaxuma.blogspot.com/2009/01/firefox.html
http://d.hatena.ne.jp/LukeSilvia/20080313/1205424352

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です