<?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>Web scratch &#187; userChome.js</title> <atom:link href="http://efcl.info/category/firefox/userchome-js/feed/" rel="self" type="application/rss+xml" /><link>http://efcl.info</link> <description>フリーソフトやFirefoxなどについて、web全般なサイト</description> <lastBuildDate>Sat, 14 Apr 2012 15:37:26 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.2</generator> <item><title>adblock++からadblock#へ移行する</title><link>http://efcl.info/2011/0524/res2760/</link> <comments>http://efcl.info/2011/0524/res2760/#comments</comments> <pubDate>Mon, 23 May 2011 16:47:16 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[Firefox]]></category> <category><![CDATA[userChome.js]]></category> <category><![CDATA[Firebug]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[広告]]></category><guid
isPermaLink="false">http://efcl.info/?p=2760</guid> <description><![CDATA[危険な広告を除去するのにAdblock++を使用していましたが、Firefox5では動かないようなので(ネイティブなものはバージョン毎にコンパイルする必要があるとかないとか)代替として、adblock#.uc.jsを使っ [...]]]></description> <content:encoded><![CDATA[<p>危険な広告を除去するのに<a
href="http://park2.wakwak.com/~benki/">Adblock++</a>を使用していましたが、Firefox5では動かないようなので(ネイティブなものはバージョン毎にコンパイルする必要があるとかないとか)代替として、<a
href="http://loda.jp/script/?andor=and&amp;sword=adblock%23.uc.js&amp;mode=ret">adblock#.uc.js</a>を使ってみることにしてみました。</p><p><a
href="http://loda.jp/script/?andor=and&amp;sword=adblock%23.uc.js&amp;mode=ret">adblock#.uc.js</a>にはadblock系リスト変換君.htmlというadblock++形式などから変換できるものが入ってますが、さすがニッチなadblock++からadblock#への変換はないようなので書いてみました。 <br
/>(今思えばadblock系リスト変換君.htmlを拡張すればよかったかも…)</p><p>必要なもの</p><ul><li><a
href="https://addons.mozilla.org/ja/firefox/addon/firebug/">Firebug</a></li></ul><script src="https://gist.github.com/986965.js"> </script><p>以下のコードをFirebugのコンソール上で実行</p><p>adblockDataの部分は自分のabout:configからextensions.adblock++.filter_array の値に差し替えてください。 <br
/>最後のcopy関数以外は別にFirebugに依存しているわけじゃないので、他の環境でも少し書き換えれば動作すると思います(MITライセンスなのでご自由に) <br
/>変換したものはクリップボードに入るので、後はadblock#.uc.js Filter Managerを開いて、入力欄にペーストして&#8221;追加&#8221;のボタンを押せばフィルターを移行できると思います。</p><p>Adblock++は<a
href="http://sig.clipp.in/entry/172291">フィルタにコンテンツの種類を設定できる</a>のですが、<a
href="http://loda.jp/script/?andor=and&amp;sword=adblock%23.uc.js&amp;mode=ret">adblock#.uc.js</a>は対応していないのでそれ系のフィルターは自動で外されます。また既にdisableなフィルターも外されます。 <br
/>正規表現周りは元々使ってないので、ちゃんと動作するかは微妙です。 <br
/>一応、Readmeに従って下記の処理には対応させたつもりです。</p><blockquote><p>ただし,「/ads/」のように前後に「/」が付く物は正規表現フィルタと誤認識されるのを防ぐため,「*/ads/*」と表記する.</p></blockquote><ul><li><a
href="https://gist.github.com/986965">adblock++ から adblock# 形式へ変換する(Firebug上で実行) — Gist</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://efcl.info/2011/0524/res2760/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>JavaScriptからメモリ情報を取得する方法</title><link>http://efcl.info/2010/1226/res2191/</link> <comments>http://efcl.info/2010/1226/res2191/#comments</comments> <pubDate>Sun, 26 Dec 2010 04:00:47 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[javascript]]></category> <category><![CDATA[userChome.js]]></category> <category><![CDATA[chrome]]></category> <category><![CDATA[Firefox]]></category> <category><![CDATA[userChrome.js]]></category><guid
isPermaLink="false">http://efcl.info/?p=2191</guid> <description><![CDATA[JavaScriptにおいてメモリ管理は基本的にエンジン任せなのであまり意識することは無いかもしれませんが、メモリリークの調査やパフォーマンスの実験のためにメモリ情報をJavaScriptから扱いたいときがあると思います [...]]]></description> <content:encoded><![CDATA[<p>JavaScriptにおいてメモリ管理は基本的にエンジン任せなのであまり意識することは無いかもしれませんが、メモリリークの調査やパフォーマンスの実験のためにメモリ情報をJavaScriptから扱いたいときがあると思います。</p><p><span
id="more-2191"></span>メモリリーク調査は専用のソフトウェアなどがあるので、</p><ul><li><a
href="http://blogs.msdn.com/b/gpde/archive/2009/08/03/javascript-memory-leak-detector-v2.aspx">JavaScript Memory Leak Detector (v2) &#8211; GPDE Team Blog &#8211; Site Home &#8211; MSDN Blogs</a> IE</li><li><a
href="http://www.softwareverify.com/javascript/memory/">Overview &#8211; JavaScript Memory Validator</a> Firefox</li><li><a
href="https://developer.mozilla.org/en/debugging_memory_leaks">Debugging memory leaks &#8211; MDC Doc Center</a></li></ul><p>そちらを使うのでもいいかもしれませんが、new Dateを使った実行時間の記録みたいにJavaScript内からメモリ情報を取得して計測できるとおもしろいと思うので、ブラウザ毎にやる方法を調べてみました。</p><p>調べてみるとWebkit系ブラウザ(Chromeとsafari)はデバッグモード時にJavaScriptからメモリ情報を取得する方法がありました。</p><h4>Webkit系</h4><p>Chrome、safari両方ともデフォルトではメモリ情報を扱うことはできないので起動オプションを設定する必要があります。<br
/> Chromeの場合は起動引数に&#8211;enable-memory-infoというオプションをつけることで有効になります。</p><pre>* Linux: /opt/google/chrome/google-chrome --enable-memory-info
* Windows XP:  "C:\Documents and Settings\＜ユーザー名＞\LocalSettings\ApplicationData\Google\Chrome\Application\chrome.exe"  --enable-memory-info
* Windows Vista以降: "C:\Users\＜ユーザー名＞\AppData\Local\Google\Chrome\Application\chrome.exe"  --enable-memory-info
* MacOS: /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --enable-memory-info
</pre><p>safariの場合はplistの設定を変えることで同じく有効にできるそうですが、Windows版はよくわからないのとMac持ってないので確かめていません。</p><div><blockquote
title="mrdoob/stats.js - GitHub" cite="https://github.com/mrdoob/stats.js"><p>MacOS: Open ~/Library/Preferences/com.apple.Safari.plist file for editing, and add &amp; set enabled a boolean preference WebKitMemoryInfoEnabled (pic)</p><cite><a
href="https://github.com/mrdoob/stats.js">mrdoob/stats.js &#8211; GitHub</a></cite></blockquote></div><h4>使い方</h4><p>上記のようにmemory-infoの機能を有効にした状態で、JavaScriptからwindow.webkitPerformance.memory.usedJSHeapSizeなどを取得するとヒープメモリの情報が返ってくるようになります。(無効の場合は常に0が返ってくるようです)<br
/> コンソールからもwindow.webkitPerformance.memory.usedJSHeapSizeとかたたけば値が返ってくると思います。<br
/> (console.memoryでも一応可能)</p><pre>window.webkitPerformance.memory &#91;object MemoryInfo&#93;
window.webkitPerformance.memory.usedJSHeapSize
window.webkitPerformance.memory.totalJSHeapSize</pre><p>使い方の例</p><pre class="brush:javascript;">(function() {
    if (webkitPerformance &amp;&amp; webkitPerformance.memory.usedJSHeapSize) {
        console.log("==Start==",
                "used : " + webkitPerformance.memory.usedJSHeapSize,
                "total : " + window.webkitPerformance.memory.totalJSHeapSize);
        var res1 = &#91;&#93;,res2 = &#91;&#93;;
        var start = webkitPerformance.memory.usedJSHeapSize;
        for (var i = 0; i &#60; 1000; i++) {
            res1&#91;i&#93; = new Date().getTime();
        }
        console.log("new Date : ", webkitPerformance.memory.usedJSHeapSize - start);
        var start2 = webkitPerformance.memory.usedJSHeapSize;
        for (var i = 0; i &#60; 1000; i++) {
            res2&#91;i&#93; = Date.now();
        }
        console.log("Date.now : ", webkitPerformance.memory.usedJSHeapSize - start2);
        console.log("==END==",
                "used : " + webkitPerformance.memory.usedJSHeapSize,
                "total : " + window.webkitPerformance.memory.totalJSHeapSize);
    }
})();</pre><h4>歴史的背景 &#8211; 余談</h4><p>上で見てるとわかりますが、memory InfoはwebkitPerformanceオブジェクト、つまりTiming APIなどが入ってるところに実装されています。しかし、<a
href="http://www.w3.org/2010/08/webperf.html">Web Performance Working Group</a>を見てもメモリ情報については書いてありません。(見つからなかった)</p><ul><li><a
href="http://www.w3.org/2010/08/webperf.html">Web Performance Working Group</a></li><li><a
href="http://blogs.msdn.com/b/ie/archive/2010/06/28/measuring-web-page-performance.aspx">Measuring Web Page Performance &#8211; IEBlog &#8211; Site Home &#8211; MSDN Blogs</a></li><li><a
href="http://journal.mycom.co.jp/news/2010/07/02/034/index.html">IE9開発版、Web Timing APIを実装 | エンタープライズ | マイコミジャーナル</a></li><li><a
href="http://journal.mycom.co.jp/news/2010/07/30/013/index.html">Chrome 6、Web Timingを実装 | エンタープライズ | マイコミジャーナル</a></li></ul><p>いつ実装されたのかを探すと、<a
href="http://www.mail-archive.com/webkit-dev@lists.webkit.org/msg11479.html">[webkit-dev] On adding &#8216;console.memory&#8217; API (and about the whole &#8216;consol</a>というメーリングリストで追加されたのが告知されていました。<br
/> このときはconsole.memoryとなっていて、webkitPerformance以下ではなくconsole以下に実装されていたようです。<br
/> なので現在はconsole.memoryとwindow.webkitPerformance.memoryのどちらの方法でも参照できるようです。<br
/> そして、わざわざwebkitPerformanceに移してるので、Web Timing APIの一部としてやってくのかもしれません。<br
/> (memory Infoの話は<a
href="https://github.com/mrdoob/stats.js">stats.js</a>の作者が詳しそう)</p><h4>Firefox</h4><p>Webkit系では実装として載っているのでいいのですが、Firefoxでも似たような事はできないかと探してみたところFirefoxプロセスのメモリ情報はXPCOMで取得できるようだったので、content(いわゆる普通のWebサイト内)でもその情報を扱えるようにするuserChrome.jsを書いてみました。(<a
href="https://addons.mozilla.org/ja/firefox/addon/122179/">uc :: Add-ons for Firefox</a>などuserChromeを実行できるアドオンを入れてからインストール)<br
/> コードは<a
href="http://loda.jp/script/?id=584">584.js(ucjs_MemoryMonitor.uc.js) &#8211; Firefox用スクリプトアップローダー(新)</a>を参考にしました。</p><p>ただし、このスクリプトはセキュリティ的に問題ありまくりなので、通常のプロファイルで使うのはやめておいた方がいいですよ。</p><script src="https://gist.github.com/754908.js?file=getMemoryInfo.uc.js"></script><p>このuserChrome.jsをインストールした状態で、window.getMemoryInfo()とすると</p><pre>{
    "mapped": mapped,
    "allocated": allocated,
    "committed": committed,
    "dirty": dirty
}</pre><p>上のようなメモリ情報のオブジェクトが返ってくるようになります。おそらくこのメモリ情報はFirefoxのプロセス全体としてのものなので、<strong>webkitPerformance.memoryとは意味が異なるため同一視してはいけない</strong>と思います。<br
/> 恐らく<strong>about:memory</strong>に載っているメモリ情報と同じだと思うので、about:memoryが実装されたFirefox3.6から使えるものかもしれない。<br
/> このスクリプトはcontent権限からChrome権限(何でもできる特権)のコードを呼んでいるので、逆を言えばこれを悪意ある方法でついてしまえばChrome権限で何でもされてしまうのでデバッグ専用のプロファイルなどで使用して、信頼できるサイト内だけで使ってください。(もっと詳しい方が安全な実装してくれればいいのですが…)</p><p>以上でJavaScriptからメモリ情報を扱う方法の紹介は終わります。<br
/> 他のブラウザor方法でもできるやり方があったら教えてください。<span
style="text-decoration: line-through;"><a
href="http://atnd.org/events/10497">JavaScript Advent Calendar</a> 26日目の記事でした。</span></p><dl><dt><strong>gist: 754908 &#8211; メモリ情報をcontentスコープから取得できるように拡張- GitHub</strong></dt><dd><a
title="gist: 754908 - メモリ情報をcontentスコープから取得できるように拡張- GitHub" href="https://gist.github.com/754908">https://gist.github.com/754908</a></dd></dl><dl><dt><strong>mrdoob/stats.js &#8211; GitHub</strong></dt><dd><a
title="mrdoob/stats.js - GitHub" href="https://github.com/mrdoob/stats.js">https://github.com/mrdoob/stats.js</a></dd></dl>]]></content:encoded> <wfw:commentRss>http://efcl.info/2010/1226/res2191/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>LDR上ではてなブックマーク拡張を使ってはてブコメントを見るuserChrome.js</title><link>http://efcl.info/2010/1211/res2177/</link> <comments>http://efcl.info/2010/1211/res2177/#comments</comments> <pubDate>Sat, 11 Dec 2010 13:02:08 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[userChome.js]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[LDR]]></category> <category><![CDATA[userChrome.js]]></category> <category><![CDATA[はてブ]]></category><guid
isPermaLink="false">http://efcl.info/?p=2177</guid> <description><![CDATA[以前書いた、LDRではてなブックマーク拡張を通してはてブのコメントをみるTomblooパッチをuserChrome.jsを使って書き直してもっと使い易くしたものです。 概要的にははてなブックマーク拡張のコメントビューアー [...]]]></description> <content:encoded><![CDATA[<p>以前書いた、<a
href="http://efcl.info/2009/0811/res1228/">LDRではてなブックマーク拡張を通してはてブのコメントをみるTomblooパッチ</a>をuserChrome.jsを使って書き直してもっと使い易くしたものです。<br
/> 概要的には<a
href="https://addons.mozilla.org/ja/firefox/addon/11285">はてなブックマーク拡張</a>のコメントビューアー機能をuserChrome.jsからよびだしてLDRの記事についてるはてブコメントを表示するものです。(なのではてなブックマーク拡張はインストールしてないと使えません)</p><ul><li><a
href="https://gist.github.com/raw/737312/44bac8b6101833a3b19af5bbd5543890c3485ca4/ldr%20hatebu%20comments%20viewer.uc.js">ldr hatebu comments viewer.uc.js</a></li></ul><p>記事にフォーカスがあった状態でmを押すとはてなコメントビューアーが開きます。<br
/> jを押すと(次の記事に移動ショートカット)コメントビューアーが開いてたときは閉じるようにしてあります。</p><p>以下、技術的な話</p><script src="https://gist.github.com/737312.js?file=ldr%20hatebu%20comments%20viewer.uc.js"></script><p>まず、userChrome.jsをどうデバッグすればいいのか忘れたので、とりあえずFirebugのコンソールへ吐くlog関数を用意した。</p><pre class="brush:javascript;">// firebugのコンソールに出力
function fbug(x) {
    var windowManager = Components.classes&#91;'@mozilla.org/appshell/window-mediator;1'&#93;.getService(Components.interfaces.nsIWindowMediator);
    var Firebug = windowManager.getMostRecentWindow("navigator:browser").Firebug;
    if (Firebug.Console.isEnabled() &amp;&amp; Firebug.toggleBar(true, 'console')) {
        Firebug.Console.logFormatted(Array.slice(arguments));
    }
    return x;
}</pre><p>もっと手軽に呼べたような気がしたけど…</p><p>次はChrome側とContent側でやりとりする方法<br
/> Chrome側ってのはuseChrome.jsや拡張機能などのいわゆる特権持ってて何でもできてしまう実行範囲のこと<br
/> Content側ってのは通常のWebサイトの実行範囲のこと。</p><p>Chrome側からContent側をいじろうとすると、<a
href="https://developer.mozilla.org/ja/XPCNativeWrapper">XPCNativeWrapper</a>でラップされているのでそのままではアクセスできません。<br
/> wrappedJSObjectを使って回避するのはあまり望ましいやり方ではないと思うので、今回はMessageEventを利用してChromeとContentを行き来してみました。<br
/> コードの真ん中ら辺のメイン部分だけ取り出してみると</p><pre class="brush:javascript;">    // docはchrome側のdocument
    // Chrome側 - 受信
    doc.addEventListener("hatenaPingMessage", function (request) {
        var res = request.data;
        if (res === "hide") {
            hBookmark.CommentViewer.hide();
        } else {
            hBookmark.CommentViewer.toggle(res);
        }
    }, false);
    // Content側 - 送信
    evalInPage(function() {
        window.addEventListener("load", function() {
            window.Keybind.add('m', function(evt) {
                var item = window.get_active_item(true);
                var permalink = item.link.replace(/#/, '%23');
                pingToChrome(permalink);
            });
            var _j = window.Keybind._keyfunc.j;// jを保存してから書き換える
            window.Keybind.add('j', function(evt) {
                _j();
                pingToChrome("hide");
            });
        }, false);
        // Chrome領域へ通知
        function pingToChrome(message) {
            var request = document.createEvent("MessageEvent");
            request.initMessageEvent("hatenaPingMessage", true, false,
                    message,
                    location.protocol + "//" + location.host,
                    "", window);
            document.dispatchEvent(request);// =&#62;hatenaPingMessage
        }
    }, &#91;&#93;);
}
function evalInPage(func, args) {
    var argStr = JSON.stringify(args || &#91;&#93;);
    safeWindow.location.href = "javascript:void " + func + ".apply(null," + argStr + ")";
}</pre><p>まずはChrome側のdocumentにイベントを待ち受けるhatenaPingMessageというeventを受け取れるにします。<br
/> そして、Content側でスクリプトを実行するためにJavaScript:プロトコルハックを使ってブックマークレット的に実行します。<br
/> その中で、hatenaPingMessageというオレオレイベントを発火させるpingToChromeを作って、pingToChromeで発火したイベントをChrome側でキャッチしてChrome権限が必要な処理(はてなコメントビューアーを呼び出す)をしています。<br
/> Google Chromeの拡張とかで似たような仕組みになってた気がします。</p><p>MessageEventとJavaScript:プロトコルハック</p><ul><li><a
href="http://nanto.asablo.jp/blog/2008/06/26/3596261">Greasemonkey スクリプトとイベントで通信: Days on the Moon</a></li><li><a
href="http://d.hatena.ne.jp/javascripter/20090324/1237903880">SmartLDR更新 &#8211; 素人がプログラミングを勉強するブログ</a></li></ul><p>Google Chrome関係のメモ</p><ul><li><a
href="http://javascript.g.hatena.ne.jp/edvakf/20100329/1269881699">ユーザースクリプトとページ側とのやりとり &#8211; JavaScriptで遊ぶよ &#8211; g:javascript</a></li><li><a
href="http://utatane-constellation.tumblr.com/post/507779801">拡張間連携とEvent Driven JavaScript &#8211; Constellation Scorpius</a></li></ul><p>FirefoxのChromeについてのメモ</p><ul><li><a
href="http://vimperator.g.hatena.ne.jp/blue_ring/20090404/1238854537">vimperatorからウィンドウにアクセスする方法 &#8211; vimpめも &#8211; vimperatorグループ</a></li><li><a
href="http://wp.serpere.info/archives/1107">XPCNativeWrapperとunsafeWindowの間でデータを送受信する | へびにっき</a></li><li><a
href="https://developer.mozilla.org/ja/XPCNativeWrapper">XPCNativeWrapper &#8211; MDC Doc Center</a></li></ul><div
id="_mcePaste" style="position: absolute; left: -10000px; top: 1178px; width: 1px; height: 1px; overflow: hidden;">pingToChrome</div>]]></content:encoded> <wfw:commentRss>http://efcl.info/2010/1211/res2177/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Greasemonkeyにデバッグ関数を追加するuserChrome.js</title><link>http://efcl.info/2010/0612/res1754/</link> <comments>http://efcl.info/2010/0612/res1754/#comments</comments> <pubDate>Sat, 12 Jun 2010 04:50:36 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[userChome.js]]></category> <category><![CDATA[Firebug]]></category> <category><![CDATA[Firefox]]></category> <category><![CDATA[Greasemonkey]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[userChrome.js]]></category><guid
isPermaLink="false">http://efcl.info/?p=1754</guid> <description><![CDATA[以前、GreasemonkeyにGrowlのような通知を呼ぶ機能を加える「Dbus Notify」 &#124; Web scratchでGreasemonkeyから使える機能を増やせたら楽しそうと書いたと書きましたが、callo [...]]]></description> <content:encoded><![CDATA[<p>以前、<a
href="http://efcl.info/2010/0606/res1708/">GreasemonkeyにGrowlのような通知を呼ぶ機能を加える「Dbus Notify」 | Web scratch</a>でGreasemonkeyから使える機能を増やせたら楽しそうと書いたと書きましたが、<a
title="lackac's callout at master - GitHub" href="http://github.com/lackac/callout">callout</a>のソースを参考にGreasemonkeyスクリプトから使える関数を追加するuseChrome.jsを書いてみました。</p><script src="http://gist.github.com/428596.js?file=ore2Greasemonkey.uc.js"></script><p>このuserChrome.jsを読み込むと、</p><pre>fbug
Clipboard.get
Clipboard.set</pre><p>などのメソッドがGreasemonkeyスクリプトから使えるようになります。<br
/>fbugはconsole.logと同じ動作ですが、Firebugのウィンドウを開いていない状態(Firebugがオフ)でもFirebugのウィンドウを開いてからlogを出してくれる関数です。(元ネタは<a
href="https://addons.mozilla.org/ja/firefox/addon/159546/">xqjs</a>)<br
/>Clipboardの方はjetpack prototypeからのコピペなのであんまり確認してません。</p><p>当たり前ですがこのuseChrome.jsをインストールしてない人の環境ではfbugなどの関数は使えないため、デバッグ目的か自分用のGreasemonkeyに使用する感じになると思います。<br
/>以下のようにデバッグ時のみ動く関数でラップしておけば、配布の際にDEBUG = false;とするだけでいいので楽かも知れません。</p><pre class="brush:javascript;">var DEBUG = true;

    log("なんとか");
    // DEBUG - http://gist.github.com/428596
    function log() {
        if ( typeof DEBUG != 'undefined' &amp;&amp; DEBUG ) {
            fbug.apply(this, arguments);
        }
    }</pre><p>何かもっと便利なデバッグ関数とか作れそうな気がします。<br
/>多分Greasemonkeyスクリプトからしか動かないようにできているので(あんまり自信ない)、そこまで危険な事は起こらないかと思いますが安全は保証できないので自己責任でというテンプレを入れておく。</p><dl><dt><strong>gist: 428596 &#8211; Greasemonkeyから使える関数を追加するuserChrome.js- GitHub</strong></dt><dd><a
title="gist: 428596 - Greasemonkeyから使える関数を追加するuserChrome.js- GitHub" href="http://gist.github.com/428596">http://gist.github.com/428596</a></dd></dl>]]></content:encoded> <wfw:commentRss>http://efcl.info/2010/0612/res1754/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>拡張機能の有効状態を保存復元するuserChrome.js</title><link>http://efcl.info/2010/0516/res1699/</link> <comments>http://efcl.info/2010/0516/res1699/#comments</comments> <pubDate>Sun, 16 May 2010 13:46:24 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[userChome.js]]></category> <category><![CDATA[Firefox]]></category> <category><![CDATA[userChrome.js]]></category> <category><![CDATA[アドオン]]></category> <category><![CDATA[拡張機能]]></category><guid
isPermaLink="false">http://efcl.info/?p=1699</guid> <description><![CDATA[Firefoxの拡張機能(アドオン)の有効になってるか無効になってるかを記録して保存できます。またその保存したものから各アドオンの有効の有無を復元することができます。 例えば、Firefoxの動作がおかしいなと感じて、ど [...]]]></description> <content:encoded><![CDATA[<p>Firefoxの拡張機能(アドオン)の有効になってるか無効になってるかを記録して保存できます。<br
/>またその保存したものから各アドオンの有効の有無を復元することができます。</p><p>例えば、Firefoxの動作がおかしいなと感じて、どのアドオンが原因なのかを調べるときに、調べる前の有効状態を保存してから、一個一個アドオンを無効化して試し、原因となるアドオンが分かったら有効状態を復元して直ぐに元通りにできます。</p><p>似たような事を行えるVimperatorプラグインがあります。</p><dl><dt><strong>アドオンの有効無効状態を保存＆復帰できるプラギン &#8211; Death to false Web browser! &#8211; vimperatorグループ</strong></dt><dd><a
title="アドオンの有効無効状態を保存＆復帰できるプラギン - Death to false Web browser! - vimperatorグループ" href="http://vimperator.g.hatena.ne.jp/nokturnalmortum/20100203/1265202872">http://vimperator.g.hatena.ne.jp/nokturnalmortum/20100203/1265202872</a></dd></dl><p>このスクリプトはuserMenu.jsが必要となるので、<a
href="../2010/0512/res1692/">userChrome.jsでメニュー拡張を追加できる「userMenu.js」 | Web scratch</a>を読んでuserMenu.jsを導入してからChromeフォルダのtoolmenuフォルダに入れてください。</p><ul><li><a
href="http://gist.github.com/raw/395918/ccd3c94c74fd552fa4f7069ef6a7f14c0a56bd7c/0001.%E3%82%A2%E3%83%89%E3%82%AA%E3%83%B3%E6%9C%89%E5%8A%B9%E7%8A%B6%E6%85%8B%E3%82%92%E4%BF%9D%E5%AD%98.S.js">0001.アドオン有効状態を保存.S.js</a></li></ul> <address>アドオンの状態はextensions.scriptprefs.GM_modoki.%u30A2%u30C9%u30AA%u30F3%u6709%u52B9%u72B6%u614B%u3092%u4FDD%u5B58.extsDisable</address><p>に保存されています。(JSON.parseして使う。)</p><p>userMenu.jsに付属していた0000.アドオンリストをタブに表示.L.jsを元にしました。</p><p>他の参考にしたもの</p><p>nsIExtensionManagerで使えるもの<strong><a
href="http://mxr.mozilla.org/mozilla/source/toolkit/mozapps/extensions/public/nsIExtensionManager.idl"><br
/>nsIExtensionManager.idl</a></strong></p><dl><dt>ダイアログの使い方。<br
/><strong>nsIPromptService &#8211; MDC</strong></dt><dd><a
title="nsIPromptService - MDC" href="https://developer-stage.mozilla.org/en/nsIPromptService#confirmEx%28%29">https://developer-stage.mozilla.org/en/nsIPromptService#confirmEx()</a></dd><dt>ダイアログの使い方。日本語ですがいろいろ抜けてます。</dt><dt><strong>Dialogs and Prompts &#8211; MDC</strong></dt><dd><a
title="Dialogs and Prompts - MDC" href="https://developer-stage.mozilla.org/ja/Code_snippets/Dialogs_and_Prompts">https://developer-stage.mozilla.org/ja/Code_snippets/Dialogs_and_Prompts<br
/></a></dd></dl>]]></content:encoded> <wfw:commentRss>http://efcl.info/2010/0516/res1699/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>userChrome.jsでメニュー拡張を追加できる「userMenu.js」</title><link>http://efcl.info/2010/0512/res1692/</link> <comments>http://efcl.info/2010/0512/res1692/#comments</comments> <pubDate>Tue, 11 May 2010 15:42:04 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[userChome.js]]></category> <category><![CDATA[Firebug]]></category> <category><![CDATA[Firefox]]></category> <category><![CDATA[Greasemonkey]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[userChrome.js]]></category> <category><![CDATA[アドオン]]></category><guid
isPermaLink="false">http://efcl.info/?p=1692</guid> <description><![CDATA[userChrome.jsでJavaScript Actionsのようなスクリプトの実行コマンドをサブメニューのネスト, タブメニューやメインメニュー、コンテキストメニューなどのメニューに追加する形のスクリプトを扱いやす [...]]]></description> <content:encoded><![CDATA[<dl><dt>userChrome.jsで<a
title="JavaScript Actions" href="http://firefox.geckodev.org/index.php?JavaScript%20Actions">JavaScript Actions</a>のようなスクリプトの実行コマンドをサブメニューのネスト, タブメニューやメインメニュー、コンテキストメニューなどのメニューに追加する形のスクリプトを扱いやすくしたり、GreasemonkeyのAPIと似たような機能を持つライブラリが使える要にするuserMenu.jsの紹介</dt><dt>ダウンロードは以下の場所から<br
/></dt><dt><strong>userChrome.js &#8211; Mozilla Firefox まとめサイト</strong></dt><dd><a
title="userChrome.js - Mozilla Firefox まとめサイト" href="http://firefox.geckodev.org/index.php?cmd=read&amp;page=userChrome.js&amp;word=user#g4f5f928">http://firefox.geckodev.org/index.php?cmd=read&amp;page=userChrome.js&amp;word=user#g4f5f928</a></dd></dl><p>いろいろバージョンが置かれてますが<a
class="ext" rel="nofollow" href="http://loda.jp/script/?id=95"><strong
class="word0">user</strong>Menu.js ver. 1.21mod 一式(Fx3以降)</a>と最新のものをダウンロードして、ver1.21はあらかじめtabmenuなどのフォルダがあって分かりやすいので、それらを最新版で上書きすると良いでしょう。</p><p>こんな感じのファイルが入ってるので、とりあえず動作させるために、FirefoxプロファイルのChromeフォルダにそのまま中身を突っ込みます。</p><pre>Chrome
│  0.UCJSToolkit.uc.js
│  GM_modoki.jsl
│  jsa.jsl
│  JSA_modoki.jsl
│  preload.sample.txt
│  scripting.txt
│  userMenu.js.readme.txt
│  userMenu.pl.js
│  userMenu.uc.js
│  ここにはuserChrome.jsなども存在
│
├─contextmenu
│      Add Copy.se.js
│      Element Killer.js
│      Google cache.nl.js
│      Google Translate.se.js
│      Open IE.nl.js
│      Open Selection.se.js
│      Reload Image.im.js
│      Use JavaScript.auto.js
│      Wayback.nl.js
│
├─tabmenu
│  └─Order.ct
│          FrameOrder.ct.auto.js
│          ImageOrder.ct.auto.js
│          JSOrder.ct.auto.js
│          PluginOrder.ct.auto.js
│          RedirectOrder.ct.auto.js
│          userContentOrder.ct.auto.js
│
└─toolmenu
        0000.アドオンリストをタブに表示.L.js
        Inspection Here.js
        Rebuild User Menu.js
        Reload userContent.css.js
        Restart Firefox.r.js
        ~.---
</pre><p>移動させて再起動すると、コンテキストメニューやツールメニューにいろいろな項目が増えていれば成功です。</p><p>一つ一つのスクリプトの機能は数が多いので適当に見れば分かるので、開発したスクリプトをメニューに表示させる方法へ。scripting.txtやuserMenu.js.readme.txtを見ると詳しく書いてありますが、contextmenuやtoolmenuといったフォルダがそのままの構成でメニューと対応してるので、それらのフォルダに作ったスクリプトをjs拡張子にして入れるだけで簡単に登録できます。(スクリプトのファイル名ルールでショートカットなども設定できる)<br
/>例えば、右クリックに表示されるスクリプトで複数のものを一つのフォルダに入れれば、それが一つの階層になります。</p><pre>contextmenu
└─JSAction
        Add Copy.se.js
        Element Killer.js
</pre><p>また先ほど紹介したようにGreasemonkeyのAPIと同様の機能を持ったものが一部使えます。<br
/>GM_setValueやGM_xmlhttpRequestなど。</p><p>デバッグ方法としてconsole.ほげ()というFirebugで使われるメソッドが使用できると書いてあるのですが、イマイチ動かなかったので、<br
/>GM_modoki.jsl (GreasemonkeyのAPIを定義してるファイル)の先頭部分に</p><pre class="brush:javascript;">
// fbug(x)でFirebugのコンソールに出力
function main(){
  var windowManager = Components.classes&#91;'@mozilla.org/appshell/window-mediator;1'&#93;
                                .getService(Components.interfaces.nsIWindowMediator);
  return windowManager.getMostRecentWindow("navigator:browser");

}
function fbug(x){
   var {Firebug} = main();
   if(Firebug.Console.isEnabled() &amp;&amp; Firebug.toggleBar(true, 'console'))
     Firebug.Console.logFormatted(Array.slice(arguments));
   return x;
}
</pre><p>と書き足して、fbug(x)でFirebugのコンソールに出力するようにしました。<br
/>Services.jsmが使えるなら以下のような感じで書けるようです。<a
href="http://d.hatena.ne.jp/murky-satyr/20100504/xqjs">xqjs &#8211; ’ellaneous</a> が元ネタです。</p><pre class="brush:javascript;">Cu.import('Services.jsm');// 読み込み先にresource:// かfile://
function main() Services.wm.getMostRecentWindow('navigator:browser');
function fbug(x){
   var {Firebug} = main();
   if(Firebug.Console.isEnabled() &amp;&amp; Firebug.toggleBar(true, 'console'))
     Firebug.Console.logFormatted(Array.slice(arguments));
   return x;
}
</pre><p>上記のfirebugコンソールへの出力は<a
href="https://addons.mozilla.org/ja/firefox/addon/159546">xqjs</a>のソースコードを見て知ったものです。<br
/><strong><a
href="http://d.hatena.ne.jp/murky-satyr/20100504/xqjs">xqjs</a></strong>は<a
href="http://code.google.com/p/executejs/" target="_blank">Execute JS</a>のようなその場でChromeやcontentに対してJavaScript実行できるアドオンです。<br
/>話題の<a
href="http://outgoing.mozilla.org/v1/70902f1cc617f6ab9569a48e3398cbef2a14c6ab/http%3A//jashkenas.github.com/coffee-script/">CoffeeScript</a>や<strong>JavaScriptの単語補完</strong>、マクロ機能、便利なユーティティ関数などが使える優れたFirefoxアドオンなので、<a
href="http://www.squarefree.com/shell/">JavaScript Shell</a>やFirebugのコンソールで入力するのが微妙だなーと思う人は一度使って見るといいかと思います。<br
/><code>fbugでFirebugのコンソールにもlogを吐けるので連携させるとなお便利。<br
/>Firebugで定義されているXpathやCSSセレクタもマクロで定義されており、copy関数なども存在します。</code></p><p>詳しくは作者さんのページとAMOとソースを読む。</p><dl><dt><strong>xqjs &#8211; ’ellaneous</strong></dt><dd><a
title="xqjs - ’ellaneous" href="http://d.hatena.ne.jp/murky-satyr/20100504/xqjs">http://d.hatena.ne.jp/murky-satyr/20100504/xqjs</a></dd></dl><p>話が完全にすり替わりましたが、userMenu.jsはuserChrome.jsを書く上でかなり便利だと思うので、一度見てみることを進めます。</p><dl><dt><strong>userMenu.js</strong></dt><dd><a
title="userMenu.js" href="http://firefox.geckodev.org/index.php?cmd=read&amp;page=userChrome.js&amp;word=user#g4f5f928">http://firefox.geckodev.org/index.php?cmd=read&amp;page=userChrome.js&amp;word=user#g4f5f928</a></dd></dl><div
id="_mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;"><dl><dt><strong>userChrome.js &#8211; Mozilla Firefox まとめサイト</strong></dt><dd><a
title="userChrome.js - Mozilla Firefox まとめサイト" href="http://firefox.geckodev.org/index.php?cmd=read&amp;page=userChrome.js&amp;word=user#g4f5f928">http://firefox.geckodev.org/index.php?cmd=read&amp;page=userChrome.js&amp;word=user#g4f5f928</a></dd></dl></div> ]]></content:encoded> <wfw:commentRss>http://efcl.info/2010/0512/res1692/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>FirebugでJSON形式を見易くフォーマットするuserChrome.js</title><link>http://efcl.info/2009/1115/res1463/</link> <comments>http://efcl.info/2009/1115/res1463/#comments</comments> <pubDate>Sun, 15 Nov 2009 11:46:12 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[userChome.js]]></category> <category><![CDATA[Firebug]]></category> <category><![CDATA[JSON]]></category> <category><![CDATA[userChrome.js]]></category><guid
isPermaLink="false">http://efcl.info/?p=1463</guid> <description><![CDATA[FirebugでDOMをtoSource()したときに生成されるJSON形式のようなものがかなり見えづらいので、それを読みやすくコンソールに表示するuserChrome.jsを作成した。 あくまで、見易く表示させることを [...]]]></description> <content:encoded><![CDATA[<p>FirebugでDOMをtoSource()したときに生成されるJSON形式のようなものがかなり見えづらいので、それを読みやすくコンソールに表示するuserChrome.jsを作成した。 <br
/> あくまで、<strong>見易く表示</strong>させることを目的としてたので、整形したものを使うという用途には向いてないかもしれません。</p><p><span
id="more-1463"></span></p><p>こっからダウンロード</p><ul><li><a
href="http://gist.github.com/raw/234552/643b98a1f96d3a77efae5627c662bd406d77ea5b/Firebug%20JSON%20formatting.uc.js"><span>Firebug JSON formatting.uc.js</span></a></li></ul><p>例えばニコニコ動画のマイリストでmy.currentItemes[0].toSource() をやると下のようなものが表示されます。 <br
/> 整形されていないしUTF-8などが混ざっていて読みづらいです。</p><pre class="brush:javascript;">({item_type:0, item_id:"1237006406", description:"", item_data:{video_id:"sm6429247", title:"\u3010\u521D\u97F3\u30DF\u30AF\u3011Blunder girl\u3010\u30AA\u30EA\u30B8\u30CA\u30EB\u66F2\u3011", thumbnail_url:"http://tn-skr4.smilevideo.jp/smile?i=6429247", first_retrieve:1237006407, update_time:1245142420, view_counter:"1469", mylist_counter:"58", num_res:"38", group_type:"default", length_seconds:"112", deleted:"0", last_res_body:"\u3053\u306E\u4EBA\u306F\u30D4\u30B3\u30D4\u30B3\u97F3\u306E \u51FA\u3060\u3057\u304C\u661F\u9593\u98DB\u884C\u306B\u8074 sm7203573\u306B\u3066\u4F7F\u7528\u3055. ", watch_id:"sm6429247"}, watch:0, create_time:1237007514, update_time:1254596442})
</pre><p>そこでこのuserChrome.jsを使って整形して表示させると、コンソールに次のような結果が返ってきます。</p><pre class="brush:javascript;"> (object){
	item_type (number): 0
	item_id (string): 1237006406
	description (string):
	item_data (object){
		video_id (string): sm6429247
		title (string): 【初音ミク】Blunder girl【オリジナル曲】
		thumbnail_url (string): http://tn-skr4.smilevideo.jp/smile?i=6429247
		first_retrieve (number): 1237006407
		update_time (number): 1245142420
		view_counter (string): 1469
		mylist_counter (string): 58
		num_res (string): 38
		group_type (string): default
		length_seconds (string): 112
		deleted (string): 0
		last_res_body (string): この人はピコピコ音の 出だしが星間飛行に聴 sm7203573にて使用さ.
		watch_id (string): sm6429247
	}
	watch (number): 0
	create_time (number): 1237007514
	update_time (number): 1254596442
}

</pre>整形後は何が何の要素なのかがわかりやすく表示されています。
さきほど、整形したものを再利用しにくいと書いたのは、その要素がstringであるなどの情報も含んでいるためです。<h3>使い方</h3><p><br
class="spacer_" /></p><div
id="attachment_1470" class="wp-caption alignnone" style="width: 310px"><a
href="http://efcl.info/wp-content/uploads/2009/11/2009-11-14-22-48-43.png"><img
class="size-medium wp-image-1470" title="2009-11-14 22-48-43" src="http://efcl.info/wp-content/uploads/2009/11/2009-11-14-22-48-43-300x55.png" alt="使い方の流れ" width="300" height="55" /></a><p
class="wp-caption-text">使い方の流れ</p></div><p><br
class="spacer_" /></p><ol><li>FirebugのコマンドラインにJSON形式のものだけを入力する(コマンドラインに入力されているものをそのまま使います)</li><li>右下のJSONボタンを押す</li><li>コンソールに結果が表示される。</li></ol><p>整形するのに<a
href="http://0-oo.net/sbox/javascript/json-decoder">JSONDecoder.js</a>を使用させてもらっています。</p><dl><dt><strong>JSONを見やすく展開してFirebugとかで表示 &#8211; JSONDecoder.js [ゼロと無限の間に]</strong></dt><dd><a
title="JSONを見やすく展開してFirebugとかで表示 - JSONDecoder.js [ゼロと無限の間に]" href="http://0-oo.net/sbox/javascript/json-decoder">http://0-oo.net/sbox/javascript/json-decoder</a></dd></dl><dl><dt><strong>gist: 234552 &#8211; GitHub</strong></dt><dd><a
title="gist: 234552 - GitHub" href="http://gist.github.com/234552">http://gist.github.com/234552</a></dd></dl><p><br
class="spacer_" /></p>]]></content:encoded> <wfw:commentRss>http://efcl.info/2009/1115/res1463/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Firebugのコンソールを外部エディタで編集できるようにするuserChome.js</title><link>http://efcl.info/2009/1115/res1465/</link> <comments>http://efcl.info/2009/1115/res1465/#comments</comments> <pubDate>Sun, 15 Nov 2009 11:22:45 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[userChome.js]]></category> <category><![CDATA[Firebug]]></category> <category><![CDATA[Firefox]]></category> <category><![CDATA[userChrome.js]]></category><guid
isPermaLink="false">http://efcl.info/?p=1465</guid> <description><![CDATA[FirebugのコンソールタブにあるコマンドラインはちょっとしたJavaScriptの動作を確認する際に便利ですが、普段使ってるエディタのように補完やハイライトされないので、少し複雑になると分かりづらくなりますね。 そこ [...]]]></description> <content:encoded><![CDATA[<p><br
class="spacer_" /></p><p>FirebugのコンソールタブにあるコマンドラインはちょっとしたJavaScriptの動作を確認する際に便利ですが、普段使ってるエディタのように補完やハイライトされないので、少し複雑になると分かりづらくなりますね。<br
/> そこで、内容の編集自体はエディタで行いその内容をコマンドラインに反映させるuserChome.jsを作成しました。</p><ul><li><a
href="http://gist.github.com/raw/235044/bb7f4052da88904d0a12595f6437906232dc6d97/Firebug_editor.uc.js"><span>Firebug_editor.uc.js</span></a></li></ul><h3>使い方</h3><ol><li>ダウンロードしたスクリプトに60行目くらいにエディタのパスを設定する場所があるのでパスを入れる</li><li>Firebugのコンソールタブで大きい方のコマンドラインを開く</li><li>右下にEditorというボタンがあるので押す</li><li>エディタで内容を編集→保存</li><li>Firefoxにフォーカスを戻すと自動的に反映</li></ol><p>下に動作の動画を置いておくので、下を見ればどのように動いてるか分かると思います。</p><p> <object
classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="367" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param
name="quality" value="high" /><param
name="bgcolor" value="#FFFFFF" /><param
name="flashVars" value="thumb=http://content.screencast.com/users/azu/folders/Default/media/b46b972e-c708-4561-abb1-a46e3a50a400/FirstFrame.png&amp;containerwidth=640&amp;containerheight=367&amp;showstartscreen=true&amp;showendscreen=true&amp;loop=false&amp;autostart=false&amp;color=1A1A1A,1A1A1A&amp;thumb=FirstFrame.png&amp;thumbscale=45&amp;content=http://content.screencast.com/users/azu/folders/Default/media/b46b972e-c708-4561-abb1-a46e3a50a400/firebug_editor.mp4" /><param
name="allowFullScreen" value="true" /><param
name="scale" value="showall" /><param
name="allowScriptAccess" value="always" /><param
name="base" value="http://content.screencast.com/users/azu/folders/Default/media/b46b972e-c708-4561-abb1-a46e3a50a400/" /><param
name="src" value="http://content.screencast.com/users/azu/folders/Default/media/b46b972e-c708-4561-abb1-a46e3a50a400/firebug_editor_controller.swf" /><param
name="flashvars" value="thumb=http://content.screencast.com/users/azu/folders/Default/media/b46b972e-c708-4561-abb1-a46e3a50a400/FirstFrame.png&amp;containerwidth=1280&amp;containerheight=738&amp;showstartscreen=true&amp;showendscreen=true&amp;loop=false&amp;autostart=false&amp;color=1A1A1A,1A1A1A&amp;thumb=FirstFrame.png&amp;thumbscale=45&amp;content=http://content.screencast.com/users/azu/folders/Default/media/b46b972e-c708-4561-abb1-a46e3a50a400/firebug_editor.mp4" /><param
name="allowfullscreen" value="true" /><embed
type="application/x-shockwave-flash" width="640" height="367" src="http://content.screencast.com/users/azu/folders/Default/media/b46b972e-c708-4561-abb1-a46e3a50a400/firebug_editor_controller.swf" base="http://content.screencast.com/users/azu/folders/Default/media/b46b972e-c708-4561-abb1-a46e3a50a400/" allowscriptaccess="always" scale="showall" allowfullscreen="true" flashvars="thumb=http://content.screencast.com/users/azu/folders/Default/media/b46b972e-c708-4561-abb1-a46e3a50a400/FirstFrame.png&amp;containerwidth=1280&amp;containerheight=738&amp;showstartscreen=true&amp;showendscreen=true&amp;loop=false&amp;autostart=false&amp;color=1A1A1A,1A1A1A&amp;thumb=FirstFrame.png&amp;thumbscale=45&amp;content=http://content.screencast.com/users/azu/folders/Default/media/b46b972e-c708-4561-abb1-a46e3a50a400/firebug_editor.mp4" bgcolor="#FFFFFF" quality="high"></embed></object></p><p><br
class="spacer_" /></p><p><span
style="text-decoration: line-through;">alice0775のスクリプトが元になってるので、Windows以外でも動くとは思います。<br
/> </span><a
href="http://twitter.com/stillpedant/statuses/5734580172">ラップする必要があったらしい。</a></p><dl><dt><strong>userChrome.jsの話題9 テキストエリアを外部エディタで編集する &#8211; alice0775のファイル置き場 &#8211; Yahoo!ジオシティーズ</strong></dt><dd><a
title="userChrome.jsの話題9 テキストエリアを外部エディタで編集する - alice0775のファイル置き場 - Yahoo!ジオシティーズ" href="http://space.geocities.yahoo.co.jp/gl/alice0775/view/20070223/1172156543">http://space.geocities.yahoo.co.jp/gl/alice0775/view/20070223/1172156543</a></dd></dl><dl><dt><strong>gist: 235044 &#8211; Firebugに外部エディタ起動ボタンを追加するuserChrome.js- GitHub</strong></dt><dd><a
title="gist: 235044 - Firebugに外部エディタ起動ボタンを追加するuserChrome.js- GitHub" href="http://gist.github.com/235044">http://gist.github.com/235044</a></dd></dl><h3>メモ</h3><pre class="brush:javascript;">Firebug.chrome.$("fbLargeCommandLine").addEventListener('focus', function(){
	Application.console.log("tewt")
}, true);
</pre><p>とかChrome権限でやるとコマンドラインにフォーカスしたときに動作するaddevenetlinerができる。<br
/> 今回使ってないけど。</p>]]></content:encoded> <wfw:commentRss>http://efcl.info/2009/1115/res1465/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <enclosure
url="http://content.screencast.com/users/azu/folders/Default/media/b46b972e-c708-4561-abb1-a46e3a50a400/firebug_editor.mp4" length="1045573" type="video/mp4" /> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 1/33 queries in 0.095 seconds using disk: basic
Object Caching 690/754 objects using disk: basic

Served from: efcl.info @ 2012-05-22 12:37:09 -->
