<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>tmty.jp &#187; Firefox</title>
	<atom:link href="http://tmty.jp/tag/firefox/feed/" rel="self" type="application/rss+xml" />
	<link>http://tmty.jp</link>
	<description>tmtysk が前よりも、もうちょっとだけコマメに更新していくかもしれないブログ</description>
	<lastBuildDate>Tue, 08 Jun 2010 13:19:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<link rel="http://api.friendfeed.com/2008/03#sup" xmlns="http://www.w3.org/2005/Atom" type="application/json" href="http://friendfeed.com/api/public-sup.json#fdff53faaa"/>		<item>
		<title>検索ボックスの文字列を自動クリアするfirefox拡張を作ってみた</title>
		<link>http://tmty.jp/2007/10/31/%e6%a4%9c%e7%b4%a2%e3%83%9c%e3%83%83%e3%82%af%e3%82%b9%e3%81%ae%e6%96%87%e5%ad%97%e5%88%97%e3%82%92%e8%87%aa%e5%8b%95%e3%82%af%e3%83%aa%e3%82%a2%e3%81%99%e3%82%8bfirefox%e6%8b%a1%e5%bc%b5%e3%82%92/</link>
		<comments>http://tmty.jp/2007/10/31/%e6%a4%9c%e7%b4%a2%e3%83%9c%e3%83%83%e3%82%af%e3%82%b9%e3%81%ae%e6%96%87%e5%ad%97%e5%88%97%e3%82%92%e8%87%aa%e5%8b%95%e3%82%af%e3%83%aa%e3%82%a2%e3%81%99%e3%82%8bfirefox%e6%8b%a1%e5%bc%b5%e3%82%92/#comments</comments>
		<pubDate>Tue, 30 Oct 2007 16:08:06 +0000</pubDate>
		<dc:creator>tmtysk</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ClearSB]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://wp.tmty.jp/2007/10/31/%e6%a4%9c%e7%b4%a2%e3%83%9c%e3%83%83%e3%82%af%e3%82%b9%e3%81%ae%e6%96%87%e5%ad%97%e5%88%97%e3%82%92%e8%87%aa%e5%8b%95%e3%82%af%e3%83%aa%e3%82%a2%e3%81%99%e3%82%8bfirefox%e6%8b%a1%e5%bc%b5%e3%82%92/</guid>
		<description><![CDATA[(2009-01-03追記) ここで紹介している clearSB のソースコード一式は、GitHub へ移管されました。
clearSB &#8211; GitHub
====


firefox の右上にある検索ボック [...]]]></description>
			<content:encoded><![CDATA[<p>(2009-01-03追記) ここで紹介している clearSB のソースコード一式は、GitHub へ移管されました。<br/><br/><br />
<a href="http://github.com/tmtysk/clearsb/tree/master">clearSB &#8211; GitHub</a><br/><br/><br />
====<br/><br />
<br/><br />
<img src="http://image.blog.livedoor.jp/tmtysk/imgs/f/5/f5d16ba5.png" width="100" height="100" border="0" alt="clearsb" hspace="5" class="pict" align="left" /><br />
firefox の右上にある検索ボックスは、検索後にフォームに検索文字列が残るようになっている。で、後ろから忍び寄ってきた人や、ちょっと席を離れたとき(大体ロックしてるけど)にスクリーンを覗いてきた人に何を検索したか見られることがあったりする。</p>
<p>今のところ、特に恥ずかしい思いを過去にしたわけでもないのだが、勝手に消えてくれた方がなんとなく嬉しい。というわけで、そんな機能を firefox の拡張(addon)で作ってみようと思い立った。SearchBox を Clear するので、名付けて clearsb (クリアエスビー) です。</p>
<p>参考にしたサイトは、次の通り。とくにまとめサイトの方がわかりやすかった。</p>
<ul>
<li><a href="http://firefox.geckodev.org/index.php?%E6%8B%A1%E5%BC%B5%E3%81%AE%E4%BD%9C%E6%88%90">拡張の作成 &#8211; Mozilla Firefox まとめサイト</a></li>
<li><a href="http://developer.mozilla.org/ja/docs/Building_an_Extension">Building an Extension &#8211; MDC</a></li>
</ul>
<p><a href="http://tmty.jp/trac/wiki/clearSB">できあがった拡張(xpi)はこちらの trac に置いておいたので、ご興味の方、どうぞお持ちください</a>。win 環境 Firefox 2.0.0.3 と linux 環境 Firefox 2.0.0.6 で動作確認済です。初めて作ったものなので、何かと行き届かない部分はご容赦を。あ、あと、最低限のコードしかしてないので、環境によっては変な動きをするかもしれません。ご利用は自己責任でお願いします。</p>
<p>以下、作業メモ。xpi の実体は zip 圧縮されたファイルなので、伸張すれば、簡単に解読できますです。</p>
<p>まず、ディレクトリ構成は、こんな感じ。</p>
<pre class="prettyprint">
<拡張を作るディレクトリのルート>$ ls -R
.:
chrome  chrome.manifest install.rdf
./chrome:
content  skin
./chrome/content:
about.xul  clearsb.js  clearsb.xul
./chrome/skin:
clearsb.png  clearsbb.png
</pre>
<p>上記の通り、ごく少量のファイルで拡張が作れてしまうわけだが、自作のアイコンや about 用のダイアログが不要であれば、用意するファイルは、次の 4 つだけで良い。</p>
<ul>
<li>インストール方法を記述した /install.rdf</li>
<li>配布ファイルの構成を記述した /chrome.manifest</li>
<li>拡張の UI への割当て方法を記述した /chrome/content/clearsb.xul</li>
<li>拡張の実処理を記述した /chrome/content/clearsb.js</li>
</ul>
<p>これだけだから、中身も全部貼っておく。</p>
<h4>/install.rdf</h4>
<p><textarea rows="30" cols="80"><br />
<?xml version="1.0"?><br />
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"<br />
xmlns:em="http://www.mozilla.org/2004/em-rdf#"><br />
<Description about="urn:mozilla:install-manifest"><br />
<em:id>{786ac958-0f07-46cf-b072-529a4160e8fe}</em:id><br />
<em:name>clearsb</em:name><br />
<em:version>0.1</em:version><br />
<em:description>検索アクション後に検索ボックスに入力した文字列をクリアする</em:description><br />
<em:creator>tmtysk</em:creator><br />
<em:homepageURL>http://blog.tmty.jp/</em:homepageURL><br />
<em:iconURL>chrome://clearsb/skin/clearsb.png</em:iconURL><br />
<em:aboutURL>chrome://clearsb/content/about.xul</em:aboutURL><br />
<em:type>2</em:type><br />
<!-- Target Application this extension can install into,<br />
with minimum and maximum supported versions. --><br />
<em:targetApplication><br />
<Description><br />
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id><br />
<em:minVersion>2.0.0.0</em:minVersion><br />
<em:maxVersion>2.0.*</em:maxVersion><br />
</Description><br />
</em:targetApplication><br />
</Description><br />
</RDF><br />
</textarea></p>
<p>なお、em:id(GUID) は<a href="http://extensions.roachfiend.com/cgi-bin/guid.pl">オンラインサービス</a>で取得してきた。</p>
<h4>/chrome.manifest</h4>
<pre class="prettyprint">
overlay chrome://browser/content/browser.xul chrome://clearsb/content/clearsb.xul
content clearsb jar:chrome/clearsb.jar!/content/
skin clearsb default jar:chrome/clearsb.jar!/skin/
</pre>
<p>拡張の実体とスキンがどこにあるかを規定するファイル。chrome:// で始まる URI を適宜書き換えれば、ディレクトリ構成はわりと自由にいけるぽい。</p>
<h4>/chrome/content/clearsb.xul</h4>
<p><textarea rows="8" cols="80"><br />
<?xml version="1.0"?><br />
<overlay id="clearsbOverlay"<br />
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"><br />
// JavaScript をインポートする<br />
<script type="application/x-javascript" src="chrome://clearsb/content/clearsb.js">
</script><br />
</overlay><br />
</textarea></p>
<p>ここで処理の実体である clearsb.js を指定している。</p>
<h4>/chrome/content/clearsb.<del>xul</del>js</h4>
<pre class="prettyprint">
var ClearSB = {
// 初期化処理 .. サーチアクションにリスナをバインドする
init: function() {
sb = document.getElementById("searchbar");
eval("sb.handleSearchCommand = " + sb.handleSearchCommand.toString().replace(
"{", "{ ClearSB.onSearch();"));
},
// サーチアクション時に呼ばれる
// 検索エンジンに文字列が渡るよう、1msec 後にフォームをクリアする
onSearch: function() {
setTimeout(function() {
sb = document.getElementById("searchbar");
sb._textbox.textValue = "";
}, 1);
}
};
// 起動時に上記のオブジェクトをロードする
window.addEventListener("load", ClearSB.init, false);
</pre>
<p>実は、肝心のこれだけのコードの書き方がなかなかわからなかった。まず、検索ボックスの検索アクションに function を bind させる方法がわからず(上記 init で eval してるところ)、次に、検索時に検索ボックスを空にすると検索エンジンに検索文字列が渡らないという現象に悩まされた(上記 onSearch で setTimeout してるところ)。<br />
結局、いろいろ探しているうちに、userchrome.js の上で同じ事をやってる人を、<a href="http://hyperreality.wordpress.com/2007/02/15/how-to-automatically-clear-a-query-from-firefoxs-search-bar/">こちらのブログのコメント欄で発見</a>し、これを頼りに上記のように書いてみたら、ようやくうまくいった感じ。この辺のプロパティ名とかがオフィシャルにまとめてあるところが見付からないんだな.. どなたかご存知でしたら教えてください。</p>
<p>最後に、上述のまとめサイトのチュートリアルに掲載されているパッケージング用のスクリプトを用意して、こいつを PATH の通ったところに突っ込む。(今回の構成用に、微妙にファイル名をカスタマイズしてあります。)</p>
<pre class="prettyprint">
#!/bin/sh -f
x=$(pwd)
x=${x##*/}
rm $x.xpi
# archive chrome (non-compressed)
mkdir -p build/chrome
cd chrome
find . ! -name '.*' -exec zip -0 ../build/chrome/$x.jar {} ;
cd ..
cp -f chrome.manifest install.rdf build
# archive whole (compressed)
cd build
find . ! -name . -exec zip -9 ../$x.xpi {} ;
cd ..
rm -rf build
</pre>
<p>これを、冒頭に書いたルートのディレクトリから実行してやると、xpi ができあがり。簡単な事をやりたかった割には時間がかかってしまった。でも JavaScript でブラウザを拡張していくという感覚は面白いな。乗り遅れたな..</p>
<p>あ、最後に、アイコン作ってくれた嫁さんと、動作確認に協力してくれた(「小倉智昭」を検索しっぱなしで恥ずかしい思いをしたばかりの) 弟に感謝。</p>
<p>(2007/10/31 18:59 追記) clearsb.js のファイル名表記が間違ってたので直しました。<br />
<br/><br/><strong>関連していそうなエントリ:</strong>
<ul class="similar-posts">
<li><a href="http://tmty.jp/2007/04/02/%e6%8b%be%e3%81%a3%e3%81%9fjavascript%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aa%e3%82%92%e3%81%99%e3%81%90%e8%a9%a6%e3%81%97%e3%81%a6%e3%81%bf%e3%82%8b%e6%96%b9%e6%b3%95/" rel="bookmark" title="2007 年 4 月 2 日">拾ったJavaScriptライブラリをすぐ試してみる方法</a></li>
<li><a href="http://tmty.jp/2007/03/20/google-blog-bar-wizard-%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f/" rel="bookmark" title="2007 年 3 月 20 日">Google Blog Bar Wizard を使ってみた</a></li>
<li><a href="http://tmty.jp/2007/01/14/javascript%e6%9c%ac%e3%82%92%e8%b2%b7%e3%81%a3%e3%81%9f/" rel="bookmark" title="2007 年 1 月 14 日">JavaScript本を買った</a></li>
</ul>
<p><!-- Similar Posts took 197.983 ms --></p>
]]></content:encoded>
			<wfw:commentRss>http://tmty.jp/2007/10/31/%e6%a4%9c%e7%b4%a2%e3%83%9c%e3%83%83%e3%82%af%e3%82%b9%e3%81%ae%e6%96%87%e5%ad%97%e5%88%97%e3%82%92%e8%87%aa%e5%8b%95%e3%82%af%e3%83%aa%e3%82%a2%e3%81%99%e3%82%8bfirefox%e6%8b%a1%e5%bc%b5%e3%82%92/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 1.422 seconds -->
