<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5616219676826309620</id><updated>2011-11-28T08:30:16.813+09:00</updated><category term='日記'/><title type='text'>juce6ox</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://juce6ox.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://juce6ox.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>latchet</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5616219676826309620.post-1002554927633873006</id><published>2008-07-13T20:50:00.011+09:00</published><updated>2008-07-15T16:13:44.450+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日記'/><title type='text'>パスワード生成Greasemonkeyスクリプト</title><content type='html'>&lt;p&gt;&lt;a href="http://mozilla.jp/firefox/"&gt;Firefox&lt;/a&gt;用の、パスワードを作成する&lt;a href="http://firefox.geckodev.org/index.php?Greasemonkey"&gt;Greasemonkey&lt;/a&gt;スクリプトを書いてみました。作成されたパスワードは自動でクリップボードにコピーできます。dataスキーム、Flashファイルは使っていません。&lt;/p&gt;

&lt;a href="http://juce6ox.googlepages.com/PassMaker.user.js"&gt;PassMaker.user.js&lt;/a&gt;

&lt;p&gt;認証画面のパスワード入力欄で、Altキーを押すと、自動作成されたパスワードが記入されます。認証サイトごとに、パスワードの文字数や使う記号を設定できます。外部ライブラリとの通信、パスワードの平文・暗号文・ハッシュ値のPCへの保存は行ないません。&lt;/p&gt;
&lt;p&gt;パスワードは、
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;ドメイン名 （www.google.com, login.yahoo.co.jp, www.hatena.ne.jp など）&lt;/li&gt;
&lt;li&gt;ユーザー欄に入力された文字列&lt;/li&gt;
&lt;li&gt;パスワード欄に入力された文字列&lt;/li&gt;
&lt;/ul&gt;
などを参照して作成されます。
ユーザー名とパスワード欄に事前入力する文字列がたとえ同じでも
別ドメインのウェブサービスでは、異なるパスワードが自動生成されます。

初期設定では、８文字のパスワードが作られます。
文字数を変更するには、パスワード欄で、Escキーを押します。
&lt;img src="http://juce6ox.googlepages.com/pass_setting.png" /&gt;
表示された設定項目のlength欄に希望するパスワードの文字数を入力します。
最大文字数は43文字です。

初期設定では、数字と大文字・小文字のアルファベットからなるパスワードが作られます。
２文字まで、パスワードに使用可能な記号を指定することができます。
その設定は、marks欄に入力します。

salt欄に文字列を入力すると、異なるパスワードを作成することができます。
作成されたパスワードをダイアログで表示させるかどうかをshow項目のラジオボタンで選べます。copy項目のラジオボタンでは、パスワードをクリップボードにコピーするかどうかを設定できます。OKボタンを押すか暗くなった画面をクリックすると、設定情報が保存され画面が元に戻ります。RESETボタンを押すと、そのサイトに関する設定情報がPCから削除されます。&lt;p&gt;&lt;/p&gt;
&lt;p&gt;アドレスバーにabout:configと入力し、フィルタを使うことで設定情報を見ることも出来ます。設定名greasemonkey.scriptvals.http://juce6ox.blogspot.com//PassMaker.dataに各サイトでの設定値を保存しています。&lt;/p&gt;
&lt;p&gt;
Firefoxの初期設定では、javascriptからクリップボードへのコピーは禁止されているようです。コピーを許可するための手順は以下の通りです。
&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href="https://addons.mozilla.org/ja/firefox/addon/722"&gt;NoScriptアドオン&lt;/a&gt;を利用している場合&lt;/li&gt;
NoScriptアドオンの詳細設定で、「クリップボードからリッチテキストのコピーとペーストを可能にする」をチェックします。
&lt;img src="http://juce6ox.googlepages.com/noscript_setting_on_clipboard.png" /&gt;

&lt;li&gt;&lt;a href="https://addons.mozilla.org/ja/firefox/addon/722"&gt;NoScriptアドオン&lt;/a&gt;を利用していない場合（Firefoxの初期設定）&lt;/li&gt;
Firefoxの&lt;a href="http://firefox.geckodev.org/index.php?%E3%83%97%E3%83%AD%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB"&gt;プロファイルフォルダ&lt;/a&gt;にあるuser.jsを編集します。
無い場合は、新規にuser.jsというファイルをそのフォルダに作成します。
その際に文字コードは、UTF-8を指定します。&lt;/ol&gt;
&lt;img src="http://juce6ox.googlepages.com/memo-utf-8-checked.png" /&gt;

user.jsに次のコードを加えます。
&lt;pre class="prettyprint"&gt;
user_pref("capability.policy.policynames", "allowclipboard");
user_pref("capability.policy.allowclipboard.sites", "https://www.google.com https://login.yahoo.co.jp https://www.hatena.ne.jp");
user_pref("capability.policy.allowclipboard.Clipboard.copy", "allAccess");
&lt;/pre&gt;
上記の例は、&lt;a href="http://www.google.co.jp/"&gt;Google&lt;/a&gt;、&lt;a href="http://www.yahoo.co.jp/"&gt;Yahoo!&lt;/a&gt;、&lt;a href="http://www.hatena.ne.jp/"&gt;はてな&lt;/a&gt;への認証画面でパスワードコピーを許可しています。
パスワードのクリップボードへの自動コピーを許可するサイトを追加するには、上記２行目のように認証を行うURLを半角スペースで区切って追加してください。
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;履歴&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;2008/7/15 : &lt;a href="http://juce6ox.googlepages.com/PassMaker.user.js"&gt;ver. 1.2&lt;/a&gt;&lt;br/&gt;設定値に関わらずパスワードが１文字になる場合の不具合を修正&lt;/li&gt;
&lt;li&gt;2008/7/14 : &lt;a href="http://juce6ox.googlepages.com/PassMaker1.1.user.js"&gt;ver. 1.1&lt;/a&gt;&lt;br/&gt;パスワード生成後のフォーカス位置を入力欄に&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;参考サイト&lt;/b&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://user1.matsumoto.ne.jp/%7Egoma/js/hash.html"&gt;Hash algorithm of JavaScript&lt;/a&gt;&lt;br/&gt;
kerryさん作のSHA-256ライブラリを活用させていただきました。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mozilla-japan.org/editor/midas-spec.html"&gt;リッチテキスト編集 仕様&lt;/a&gt;&lt;a href="http://www.mozilla.org/editor/midas-spec.html"&gt;(英語版)&lt;/a&gt;&lt;br/&gt;&lt;a href="http://www.fourmeisters.com/blog/yoshi/2007/09/wysiwyg.html"&gt;WYSIWYGエディタに夢中になったときのメモ&lt;/a&gt;&lt;br/&gt;
designMode属性、execCommandメソッドについて。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mozilla-japan.org/editor/midasdemo/securityprefs.html"&gt;Mozilla リッチテキスト編集デモ向け設定&lt;/a&gt;&lt;a href="http://www.mozilla.org/editor/midasdemo/securityprefs.html"&gt;(英語版)&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://firefox.geckodev.org/index.php?cmd=read&amp;amp;page=user.js#k0f552c3"&gt;リッチテキストのコピー&amp;amp;ペーストを許可する - Mozilla Firefox まとめサイト&lt;/a&gt;&lt;br/&gt;
execCommandで編集するためのuser.js設定について。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://la.ma.la/blog/diary_200601100445.htm"&gt;Firefoxでテキストをクリップボードにコピーする方法 - 最速インターフェース研究会&lt;/a&gt;&lt;br/&gt;dataスキームを使い外部への通信をせずにBase64符号化されたFlashとの連携でクリップボードへのコピーをする方法。凄い発想と着眼点。Flash Player8で有効。現在のFlash Player9以降ではこの手法は仕様変更により無効化された模様？&lt;/li&gt;
&lt;li&gt;&lt;a href="http://labs.unoh.net/2006/12/javascriptiefirefox.html"&gt;JavaScriptでクリップボードを使う(IE/Firefox) - ウノウラボ&lt;/a&gt;&lt;br/&gt;&lt;a href="http://d.hatena.ne.jp/secondlife/20070928"&gt;Firefox でクリップボードに値をセットする関数を作るワンライナ - 川o・-・）＜2nd life&lt;/a&gt;&lt;br/&gt;&lt;a href="http://subtech.g.hatena.ne.jp/cho45/20080628/1214632622"&gt;サイトごとにパスワード変えたい - 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。&lt;/a&gt;&lt;br/&gt;Flashのswfファイルとjavascriptの連携によるクリップボード操作について。&lt;/li&gt;
&lt;/ul&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5616219676826309620-1002554927633873006?l=juce6ox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juce6ox.blogspot.com/feeds/1002554927633873006/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5616219676826309620&amp;postID=1002554927633873006' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/1002554927633873006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/1002554927633873006'/><link rel='alternate' type='text/html' href='http://juce6ox.blogspot.com/2008/07/greasemonkey.html' title='パスワード生成Greasemonkeyスクリプト'/><author><name>latchet</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5616219676826309620.post-8907745229392337734</id><published>2007-12-12T17:28:00.000+09:00</published><updated>2007-12-12T17:55:44.488+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日記'/><title type='text'>TEST : DOM Load Event</title><content type='html'>DOM ロード関連のイベントの発火順番を調べるテストを書きました。&lt;br/&gt;
&lt;br/&gt;
&lt;a href="http://juce6ox.googlepages.com/test_DOMLoad.html"&gt;TEST : DOM Load Event&lt;/a&gt;&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
上記テストでは、いくつかの手法を一つのファイルにまとめています。&lt;br/&gt;
&lt;br/&gt;
IE で DOM ロードを検知するには、script defer を使うのが優れた方法だとおもいますが、document.write を使いたくない場合には、doScroll の動作検知を利用したり、setTimeoutを使わない cached htc を利用したりと多様なやり方があることが分かりました。&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5616219676826309620-8907745229392337734?l=juce6ox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juce6ox.blogspot.com/feeds/8907745229392337734/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5616219676826309620&amp;postID=8907745229392337734' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/8907745229392337734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/8907745229392337734'/><link rel='alternate' type='text/html' href='http://juce6ox.blogspot.com/2007/12/test-dom-load-event.html' title='TEST : DOM Load Event'/><author><name>latchet</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5616219676826309620.post-1246379358793063287</id><published>2007-12-12T15:21:00.000+09:00</published><updated>2007-12-13T13:08:41.395+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日記'/><title type='text'>IE/DOMLoad : cached htc</title><content type='html'>document.write を使わず、外部ファイルのダウンロードをしない、IE用の DOM ロードイベントを取得する方法を考えました。&lt;br/&gt;
&lt;br/&gt;
DHTMLの &lt;a href="http://msdn2.microsoft.com/en-us/library/ms531024.aspx"&gt;ondocumentready&lt;/a&gt; イベントを利用します。&lt;br/&gt;
そのためには、DOM要素に &lt;a href="http://msdn2.microsoft.com/en-us/library/ms530723.aspx"&gt;behavior&lt;/a&gt; 属性で htc ファイルへの参照設定が必要となります。そこで、外部ファイルのダウンロードを不要とするために、ブラウザのキャッシュ機能の利用を考えて、javascriptファイルの拡張子を htc とします。そしてブラウザ判定でIEならば、拡張子が htc である javascript ファイル自身のURLをbehavior属性に渡します。これによりブラウザのキャッシュが使用され、新たな通信が不要となることが期待されます。&lt;br/&gt;
&lt;br/&gt;
HTML :
&lt;pre class="prettyprint"&gt;
&amp;lt;script src="http:// ... /onready.htc" type="text/javascript" charset="utf-8"&amp;gt;&amp;lt;/script&amp;gt;
&lt;/pre&gt;
javascript :
&lt;pre class="prettyprint"&gt;
onready(function(){
    alert('how are you?');
});
onready(function(){
    alert('fine! and you?');
});
onready(function(){
    alert('me, too!');
});
&lt;/pre&gt;
&lt;br/&gt;
&lt;a href="http://juce6ox.googlepages.com/onready.htc"&gt;onready.htc&lt;/a&gt; :
&lt;pre class="prettyprint"&gt;
/*
&amp;lt;?xml version="1.0" encoding="utf-8" standalone="yes"?&amp;gt;
&amp;lt;public:component xmlns="http://www.w3.org/1999/xhtml" xmlns:public="urn:HTMLComponent"&amp;gt;
&amp;lt;public:attach event="ondocumentready" onevent="element.init();" /&amp;gt;
&amp;lt;!--

    onready.htc : Cross-Browser DOMContentLoaded Event Listener with Cached HTC script hack for IE

    Copyright (c) 2007 latchet (http://juce6ox.blogspot.com/)
    Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)

*/
var onready = (function(){
    var id,
        ua   = navigator.userAgent.toLowerCase(),
        fs   = [],
        i    = 0,
        done = false,
        init = function(){
                   var f, j = 0;
                   if(done) return;
                   done = true;
                   /*@cc_on
                   document.documentElement.init = null;
                   if(id != undefined) document.documentElement.removeBehavior(id);
                   window.detachEvent('onload', init);
                   document.onreadystatechange = null;
                   /*@if(false)@*/
                   document.removeEventListener('DOMContentLoaded', init, false);
                   window.removeEventListener('load', init, false);
                   /*@end@*/
                   window.onload = null;
                   while(f = fs[j++]) f();
               },
    /*@cc_on
        url  = (function(e, ok){
                   while(e = e.lastChild)
                       if(e.nodeName.toLowerCase() == 'script' &amp;&amp; ok.test(e.src))
                           return e.src;
               })(document, /^[^?#]+\.htc$/),
    @*/
        set  = function(){
                   var ok;
                   /*@cc_on
                   document.documentElement.init = init;
                   if(url) id = document.documentElement.addBehavior(url);
                   window.attachEvent('onload', init);
                   document.onreadystatechange = function(){
                       if(document.readyState == 'complete') init();
                   };
                   /*@if(false)@*/
                   if(/mozilla/.test(ua) &amp;&amp; !/compatible|webkit/.test(ua) || /opera/.test(ua))
                       document.addEventListener('DOMContentLoaded', init, false);
                   else if(/webkit|khtml/.test(ua) &amp;&amp; (ok = /loaded|complete/))
                       (function(){
                           return ok.test(document.readyState) ? init() : setTimeout(arguments.callee, 0);
                       })();
                   window.addEventListener('load', init, false);
                   /*@end@*/
                   var old = window.onload;
                   window.onload = (typeof old == 'function') ? function(){old();init();} : init;
               };
    return function(f){
        if(typeof f != 'function') return;
        if(done) return f();
        if(!i) set();
        fs[i++] = f;
    };
})();
//--&amp;gt;&amp;lt;/public:component&amp;gt;

&lt;/pre&gt;
&lt;br/&gt;
参考資料&lt;br/&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://dean.edwards.name/weblog/2005/09/busted2/"&gt;window.onload - An Alternative Solution&lt;/a&gt;&lt;/li&gt;
&lt;p&gt;通常の外部 HTC ファイルをロードして ondocumentready イベントを設定する方法について。&lt;/p&gt;
&lt;li&gt;&lt;a href="http://moz-addon.g.hatena.ne.jp/ZIGOROu/20071011/1192124430"&gt;XML版HTCを書くための永久保存版テンプレートとbehaviorを使った時の実行順序、イベントなど - Ci.nsIZIGOROu - Mozilla 拡張機能勉強会&lt;/a&gt;&lt;/li&gt;
&lt;p&gt;HTCファイルのXML表現をはじめとする丁寧で詳細なまとめ。&lt;/p&gt;
&lt;li&gt;&lt;a href="http://labs.cybozu.co.jp/blog/takesako/2007/06/opera_img-jsonp.html"&gt;TAKESAKO @ Yet another Cybozu Labs: Operaでも非同期リクエストが並列処理できる img-JSONP&lt;/a&gt;&lt;/li&gt;
&lt;p&gt;ブラウザのキャッシュ機能を利用するアイデア。&lt;/p&gt;
&lt;li&gt;&lt;a href="http://www.slideshare.net/takesako/shibuyajs24-javascriptgif-x-liveconnect/"&gt;Shibuyajs24 JavaScript.GIF x LiveConnect » SlideShare&lt;/a&gt;&lt;/li&gt;
&lt;p&gt;拡張子が js でないファイルを script 要素でロードし javascript とみなすアイデア。&lt;/p&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5616219676826309620-1246379358793063287?l=juce6ox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juce6ox.blogspot.com/feeds/1246379358793063287/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5616219676826309620&amp;postID=1246379358793063287' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/1246379358793063287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/1246379358793063287'/><link rel='alternate' type='text/html' href='http://juce6ox.blogspot.com/2007/12/iedomload-cached-htc.html' title='IE/DOMLoad : cached htc'/><author><name>latchet</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5616219676826309620.post-2085559206199258769</id><published>2007-12-12T13:32:00.000+09:00</published><updated>2007-12-13T10:17:10.655+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日記'/><title type='text'>IE/DOMLoad : behavior expression</title><content type='html'>IEの独自実装による document.write を使わない &lt;a href="http://juce6ox.blogspot.com/2007/12/windowonload-problem.html"&gt;DOMロード&lt;/a&gt; の検知方法を考えました。&lt;br/&gt;
&lt;br/&gt;
CSSのbehaviorとexpressionを使います。&lt;br/&gt;
behaviorは画面描画のたびに頻繁に評価されます。&lt;br/&gt;
expressionを用いると、javascriptを記述できます。&lt;br/&gt;
&lt;br/&gt;
上記を利用することで、&lt;a href="http://javascript.nwbox.com/"&gt;Diego Perini氏&lt;/a&gt;による &lt;a href="http://javascript.nwbox.com/IEContentLoaded/"&gt;doScroll の動作チェックコード&lt;/a&gt;の頻度をあげるというアイデアです。&lt;br/&gt;
アイデアの中心となるコードは次のようなものです。&lt;br/&gt;
&lt;pre class="prettyprint"&gt;
document.documentElement.style.setExpression('behavior', 'document.documentElement.polling()');
&lt;/pre&gt;
&lt;br/&gt;
これを利用したDOMロードイベントのライブラリを公開します。&lt;br/&gt;
利用方法は、関数 onready の引数に、DOMロード後に実行したい関数を渡すだけです。&lt;br/&gt;&lt;br/&gt;
HTML :
&lt;pre class="prettyprint"&gt;
&amp;lt;script src="http:// ... /onready.js" type="text/javascript" charset="utf-8"&amp;gt;&amp;lt;/script&amp;gt;
&lt;/pre&gt;
javascript :
&lt;pre class="prettyprint"&gt;
onready(function(){
    alert('how are you?');
});
onready(function(){
    alert('fine! and you?');
});
onready(function(){
    alert('me, too!');
});
&lt;/pre&gt;
&lt;br/&gt;
&lt;a href="http://juce6ox.googlepages.com/onready.js"&gt;onready.js&lt;/a&gt; :
&lt;pre class="prettyprint"&gt;
/*
    onready.js : Cross-Browser DOMContentLoaded Event Listener

    Copyright (c) 2007 latchet (http://juce6ox.blogspot.com/)
    Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
*/
var onready = (function(){
    var id,
        ua   = navigator.userAgent.toLowerCase(),
        fs   = [],
        i    = 0,
        done = false,
    /*@cc_on
        oldExp,
    @*/
        init = function(){
                   var f, j = 0;
                   if(done) return;
                   done = true;
                   /*@cc_on
                   if(oldExp) document.documentElement.style.setExpression('behavior', oldExp);
                   else       document.documentElement.style.removeExpression('behavior');
                   window.detachEvent('onload', init);
                   document.onreadystatechange = null;
                   /*@if(false)@*/
                   document.removeEventListener('DOMContentLoaded', init, false);
                   window.removeEventListener('load', init, false);
                   /*@end@*/
                   window.onload = null;
                   while(f = fs[j++]) f();
               },
        set  = function(){
                   var ok;
                   /*@cc_on
                   oldExp = document.documentElement.style.getExpression('behavior');
                   document.documentElement.polling = function(){
                       try{
                           document.documentElement.doScroll('left');
                       }catch(e){
                           return setTimeout(document.documentElement.polling, 0);
                       };
                       document.documentElement.polling = null;
                       init();
                   };
                   document.documentElement.style.setExpression('behavior', 'document.documentElement.polling()');
                   window.attachEvent('onload', init);
                   document.onreadystatechange = function(){
                       if(document.readyState == 'complete') init();
                   };
                   /*@if(false)@*/
                   if(/mozilla/.test(ua) &amp;&amp; !/compatible|webkit/.test(ua) || /opera/.test(ua))
                       document.addEventListener('DOMContentLoaded', init, false);
                   else if(/webkit|khtml/.test(ua) &amp;&amp; (ok = /loaded|complete/))
                       (function(){
                           return ok.test(document.readyState) ? init() : setTimeout(arguments.callee, 0);
                       })();
                   window.addEventListener('load', init, false);
                   /*@end@*/
                   var old = window.onload
                   window.onload = (typeof old == 'function') ? function(){old();init();} : init;
               };
    return function(f){
        if(typeof f != 'function') return;
        if(done) return f();
        if(!i) set();
        fs[i++] = f;
    };
})();
&lt;/pre&gt;&lt;br/&gt;
参考資料&lt;br/&gt;
&lt;ul&gt;
&lt;li&gt;Diego Perini : &lt;a href="http://javascript.nwbox.com/IEContentLoaded/"&gt;IEContentLoaded - An alternative for DOMContenloaded on Internet Explorer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;msdn : &lt;a href="http://msdn2.microsoft.com/en-us/library/ms530723.aspx"&gt;behavior Property&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;msdn : &lt;a href="http://msdn2.microsoft.com/en-us/library/ms531196.aspx"&gt;setExpression Method&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Jesse Skinner : &lt;a href="http://www.thefutureoftheweb.com/blog/adddomloadevent"&gt;addDOMLoadEvent - The Future of the Web&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br/&gt;
このアイデアを思いついてコードを書き終えたころに、細かい違いはありますが、
同じようにbehaviorとexpressionを使うアイデアを、doScrollハックの考案者であるDiego Perini氏が&lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;のメーリングリストに投稿していたことを検索の結果、知りました（笑）&lt;br/&gt;
&lt;br/&gt;
&lt;a href="http://www.nabble.com/Re%3A-document.ready-firing-too-early-within-iframe-p13376590s27240.html"&gt;Nabble - Re: document.ready firing too early within iframe&lt;/a&gt;&lt;br/&gt;
&lt;br/&gt;
その時は正直、すこしがっくりしましたが、気付かなかったからこそ取り組めた面もあるのかもしれません。コードを整えつつ、その後、新しい別の方法が無いか再び試行錯誤し、（自分にとって）新しいアプローチを見つけました。document.writeは使わず、IEの&lt;a href="http://msdn2.microsoft.com/en-us/library/ms531024.aspx"&gt;DHTMLのondocumentreadyイベント&lt;/a&gt;を利用しつつ、新たな通信をしなくてもすむとおもわれる方法です。&lt;br/&gt;
&lt;br/&gt;
&lt;a href="http://juce6ox.blogspot.com/2007/12/iedomload-cached-htc.html"&gt;IE/DOMLoad : cached htc&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5616219676826309620-2085559206199258769?l=juce6ox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juce6ox.blogspot.com/feeds/2085559206199258769/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5616219676826309620&amp;postID=2085559206199258769' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/2085559206199258769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/2085559206199258769'/><link rel='alternate' type='text/html' href='http://juce6ox.blogspot.com/2007/12/iedomload-behavior-expression.html' title='IE/DOMLoad : behavior expression'/><author><name>latchet</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5616219676826309620.post-4279840773763292496</id><published>2007-12-12T12:26:00.000+09:00</published><updated>2007-12-13T10:18:33.097+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日記'/><title type='text'>window.onload Problem</title><content type='html'>javascript の window.onload イベントはページの解析、画像などのファイル読込が全て完了してから発生するようです。&lt;br/&gt;
そのため、ロードイベント前の文書の解析後に迅速にページのDOM要素に対してjavascriptで操作を行ないたいという要求がおこるのは、ユーザーの利便性を考慮すると当然といえそうです。&lt;br/&gt;
&lt;br/&gt;
Ajaxという言葉が注目され、Googleによるjavascriptを活用したアプリケーションが登場し、
回線速度の向上、インフラ整備、ブログ作成者・閲覧者の増加、ウェブAPIの公開、
マッシュアップサイトが数多く登場しています。&lt;br/&gt;
&lt;br/&gt;
そのような背景の中でjavascriptによる DOM ロードイベント検知の方法もいろいろ探究されてきたようです。今までの流れを書き出してみました。&lt;br/&gt;
&lt;br/&gt;

&lt;ul&gt;
&lt;li&gt;1993/04/30 : &lt;a href="http://ja.wikipedia.org/wiki/%E3%83%86%E3%82%A3%E3%83%A0%E3%83%BB%E3%83%90%E3%83%BC%E3%83%8A%E3%83%BC%E3%82%BA%EF%BC%9D%E3%83%AA%E3%83%BC"&gt;Tim Berners-Lee&lt;/a&gt; , &lt;a href="http://ja.wikipedia.org/wiki/%E6%AC%A7%E5%B7%9E%E5%8E%9F%E5%AD%90%E6%A0%B8%E7%A0%94%E7%A9%B6%E6%A9%9F%E6%A7%8B"&gt;CERN&lt;/a&gt; - &lt;a href="http://ja.wikipedia.org/wiki/World_Wide_Web"&gt;World Wide Web&lt;/a&gt; 無料開放&lt;/li&gt;&lt;ul&gt;
&lt;a href="http://tenyears-www.web.cern.ch/tenyears-www/Welcome.html"&gt;10 Years Public Domain&lt;/a&gt;&lt;/ul&gt;
&lt;br/&gt;
&lt;li&gt;1995 : &lt;a href="http://en.wikipedia.org/wiki/Brendan_Eich"&gt;Brendan Eich&lt;/a&gt; - JavaScript誕生&lt;/li&gt;&lt;ul&gt;
JavaScript - Wikipedia (&lt;a href="http://ja.wikipedia.org/wiki/JavaScript"&gt;日本語&lt;/a&gt;) (&lt;a href="http://en.wikipedia.org/wiki/JavaScript"&gt;English&lt;/a&gt;)&lt;/ul&gt;
&lt;br/&gt;
&lt;li&gt;1998/10/01 : &lt;a href="http://ja.wikipedia.org/wiki/World_Wide_Web_Consortium"&gt;W3C&lt;/a&gt; - DOM1仕様勧告&lt;/li&gt;&lt;ul&gt;
&lt;a href="http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/"&gt;Document Object Model (DOM) Level 1 Specification&lt;/a&gt;&lt;/ul&gt;
&lt;br/&gt;
&lt;li&gt;1999/03/18 : Microsoft - &lt;a href="http://en.wikipedia.org/wiki/Internet_Explorer"&gt;IE&lt;/a&gt; 5 リリース&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms759148.aspx"&gt;IXMLHTTPRequest&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms531018.aspx"&gt;HTC Reference&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br/&gt;
&lt;li&gt;2004/04/01 : Google - GMail 告知&lt;/li&gt;&lt;ul&gt;
&lt;a href="http://www.google.com/press/pressrel/gmail.html"&gt;Google Gets the Message, Launches Gmail - Google Press Center&lt;/a&gt;&lt;/ul&gt;
&lt;br/&gt;
&lt;li&gt;2005/02/08 : Google - Google Maps 告知&lt;/li&gt;&lt;ul&gt;
&lt;a href="http://googleblog.blogspot.com/2005/02/mapping-your-way.html"&gt;Official Google Blog: Mapping your way&lt;/a&gt;&lt;/ul&gt;
&lt;br/&gt;
&lt;li&gt;2005/02/18 : &lt;a href="http://en.wikipedia.org/wiki/Jesse_James_Garrett"&gt;Jesse James Garrett&lt;/a&gt; - &lt;a href="http://ja.wikipedia.org/wiki/Ajax"&gt;Ajax&lt;/a&gt; 提唱&lt;/li&gt;&lt;ul&gt;
&lt;a href="http://www.adaptivepath.com/ideas/essays/archives/000385.php"&gt;adaptive path » Ajax: A New Approach to Web Applications&lt;/a&gt;&lt;/ul&gt;
&lt;br/&gt;
&lt;li&gt;2005/09/24 : &lt;a href="http://dean.edwards.name/"&gt;Dean Edwards&lt;/a&gt; - DOMロード問題&lt;/li&gt;&lt;ul&gt;
&lt;a href="http://dean.edwards.name/weblog/2005/09/busted/"&gt;The window.onload Problem - Solved!&lt;/a&gt;&lt;br/&gt;
&lt;li&gt;DOMContentLoaded ( Mozilla/Firefox )&lt;/li&gt;&lt;li&gt;script defer ( IE : 外部 javascript ファイル読込あり )&lt;/li&gt;&lt;/ul&gt;
&lt;br/&gt;
&lt;li&gt;2005/09/25 : &lt;a href="http://dean.edwards.name/"&gt;Dean Edwards&lt;/a&gt; - DOMロード問題&lt;/li&gt;&lt;ul&gt;
&lt;a href="http://dean.edwards.name/weblog/2005/09/busted2/"&gt;window.onload - An Alternative Solution&lt;/a&gt;&lt;br/&gt;
&lt;li&gt;ondocumentready ( IE : 外部 HTC ファイル読込あり )&lt;/li&gt;&lt;/ul&gt;
&lt;br/&gt;
&lt;li&gt;2005/09/30 : &lt;a href="http://ja.wikipedia.org/wiki/%E3%83%86%E3%82%A3%E3%83%A0%E3%83%BB%E3%82%AA%E3%83%A9%E3%82%A4%E3%83%AA%E3%83%BC"&gt;Tim O'Reilly&lt;/a&gt; - &lt;a href="http://ja.wikipedia.org/wiki/Web_2.0"&gt;Web 2.0&lt;/a&gt; 提唱&lt;/li&gt;&lt;ul&gt;
&lt;a href="http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html"&gt;O'Reilly -- What Is Web 2.0&lt;/a&gt;&lt;/ul&gt;
&lt;br/&gt;
&lt;li&gt;2006/04/20 : livedoor - &lt;a href="http://reader.livedoor.com/"&gt;livedoor Reader&lt;/a&gt; リリース&lt;/li&gt;&lt;br/&gt;
&lt;br/&gt;
&lt;li&gt;2006/06/08 : &lt;a href="http://blog.outofhanwell.com/"&gt;Matthias Miller&lt;/a&gt; - DOMロード問題&lt;/li&gt;&lt;ul&gt;
&lt;a href="http://blog.outofhanwell.com/2006/06/08/the-windowonload-problem-revisited/"&gt;The window.onload Problem Revisited « Out of Hanwell&lt;/a&gt;
&lt;li&gt;script defer ( IE : 外部 javascript ファイル読込なし )&lt;/li&gt;&lt;/ul&gt;
&lt;br/&gt;
&lt;li&gt;2006/06/15 : &lt;a href="http://ejohn.org/"&gt;John Resig&lt;/a&gt; - DOMロード問題&lt;/li&gt;&lt;ul&gt;
&lt;a href="http://dean.edwards.name/weblog/2006/06/again/"&gt;window.onload (again)&lt;/a&gt;
&lt;li&gt;document.readyState ( Safari )&lt;/li&gt;&lt;/ul&gt;
&lt;br/&gt;
&lt;li&gt;2006/06/20 : &lt;a href="http://ja.wikipedia.org/wiki/Opera"&gt;Opera&lt;/a&gt; 9 リリース&lt;/li&gt;&lt;ul&gt;
&lt;a href="http://jp.opera.com/pressreleases/ja/2006/06/20/"&gt;Your Web, Your Choice: Opera 9、これまでにない操作感を&lt;/a&gt;
&lt;li&gt;DOMContentLoaded ( Opera )&lt;/li&gt;&lt;/ul&gt;
&lt;br/&gt;
&lt;li&gt;2007/06/28 : &lt;a href="http://javascript.nwbox.com/"&gt;Diego Perini&lt;/a&gt; - DOMロード問題&lt;/li&gt;&lt;ul&gt;
&lt;a href="http://javascript.nwbox.com/DOMComplete/DOMComplete.js"&gt;DOMComplete.js&lt;/a&gt;
&lt;li&gt;doScroll ( IE )&lt;/li&gt;
&lt;li&gt;&lt;a href="http://javascript.nwbox.com/DOMComplete/"&gt;DOMComplete: test case&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.hedgerwow.com/360/dhtml/ie-dom-ondocumentready.html"&gt;IEContentLoaded :: An alternative for DOMContentLoaded on Internet Explorer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://javascript.nwbox.com/IEContentLoaded/"&gt;IEContentLoaded - An alternative for DOMContenloaded on Internet Explorer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ajaxian.com/archives/more-fun-with-domcontentloaded"&gt;Ajaxian » More fun with DOMContentLoaded&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/ul&gt;
&lt;br/&gt;
枯れた技術が活用され、以前は想定されなかった問題が解決されていく様子に見えます。&lt;br/&gt;
HTML5草案では、DOMContentLoadedイベント（FirefoxとOperaは実装済）が提案されているそうです。&lt;br/&gt;
将来、SafariとIEにも採用されたら多くの人に喜ばれそう。&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5616219676826309620-4279840773763292496?l=juce6ox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juce6ox.blogspot.com/feeds/4279840773763292496/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5616219676826309620&amp;postID=4279840773763292496' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/4279840773763292496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/4279840773763292496'/><link rel='alternate' type='text/html' href='http://juce6ox.blogspot.com/2007/12/windowonload-problem.html' title='window.onload Problem'/><author><name>latchet</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5616219676826309620.post-3596330575300412160</id><published>2007-11-17T15:18:00.000+09:00</published><updated>2007-12-13T08:38:03.105+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日記'/><title type='text'>CSS/DOM : 動的にスタイルシートへルールを追加する</title><content type='html'>スタイル属性を動的に一括して設定します。&lt;br/&gt;
引数にはセレクタとルールを指定します。
&lt;pre class='prettyprint'&gt;
//使用例
//addCSSRule(selector, declaration);

addCSSRule('div.test', 'width:200px; height:100px;');
addCSSRule('div.test', 'background:#ccc;');
&lt;/pre&gt;
&lt;br/&gt;
&lt;pre class='prettyprint'&gt;
var addCSSRule = (/*@cc_on!@*/false)
    ? (function(sheet){
          return function(selector, declaration){
              sheet.addRule(selector, declaration);
          };
      })(document.createStyleSheet())
    : (function(sheet){
          return function(selector, declaration){
              sheet.insertRule(selector + '{' + declaration + '}', sheet.cssRules.length);
          };
      })((function(e){
            e.appendChild(document.createTextNode(''));
            (document.getElementsByTagName('head')[0] || (function(h){
                document.documentElement.insertBefore(h, this.firstChild);
                return h;
            })(document.createElement('head'))).appendChild(e);
            return e.sheet;
        })(document.createElement('style')))
    ;
&lt;/pre&gt;
&lt;br/&gt;&lt;br/&gt;
資料&lt;br/&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://bmky.net/text/note/javascript-css.html"&gt;[暴満館] JavaScriptによるCSSの操作&lt;/a&gt;&lt;/li&gt;&lt;br/&gt;
&lt;li&gt;&lt;a href="http://d.hatena.ne.jp/amachang/20070703/1183445387"&gt;Safari で CSSStyleSheet オブジェクトを生成する方法 - IT戦記&lt;/a&gt;&lt;/li&gt;&lt;br/&gt;
&lt;li&gt;&lt;a href="http://amachang.art-code.org/usrb.in/amachang/static/cssstudy/200701/"&gt;CSS + JavaScript Tips&lt;/a&gt;&lt;/li&gt;&lt;br/&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5616219676826309620-3596330575300412160?l=juce6ox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juce6ox.blogspot.com/feeds/3596330575300412160/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5616219676826309620&amp;postID=3596330575300412160' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/3596330575300412160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/3596330575300412160'/><link rel='alternate' type='text/html' href='http://juce6ox.blogspot.com/2007/11/cssdom.html' title='CSS/DOM : 動的にスタイルシートへルールを追加する'/><author><name>latchet</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5616219676826309620.post-8078009262598050127</id><published>2007-11-13T18:31:00.000+09:00</published><updated>2007-11-14T11:44:03.632+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日記'/><title type='text'>XPath/DOM : javascriptファイルの呼び出し元script要素を取得する</title><content type='html'>XPathを用いると、きめ細かく要素を指定できるようです。&lt;br/&gt;
たとえばamachangさんによる&lt;a href="http://d.hatena.ne.jp/amachang/20061201/1164986067"&gt;script要素取得コード&lt;/a&gt;は以下のようなXPath式で表現可能です。&lt;br/&gt;
createElementで動的に生成されたscript要素を、その時点でのDOMツリーの末尾以外の任意の位置にappendChildしている場合には要素を取得できずにnullを返すか、ブラウザが解析中にたまたま末尾に存在する別のscript要素が返されます。&lt;br/&gt;
静的にHTMLで記述されたscript要素についてはその心配はありません。&lt;br/&gt;
&lt;br/&gt;
&lt;pre class='prettyprint'&gt;
var currentScript = !!(document.implementation &amp;&amp; document.implementation.hasFeature &amp;&amp; document.implementation.hasFeature('XPath', '3.0'))
    ? document.evaluate(
          '//*[local-name()="SCRIPT" or local-name()="script"][not(ancestor-or-self::*[following-sibling::*])]',
          document,
          null,
          XPathResult.FIRST_ORDERED_NODE_TYPE,
          null
      ).singleNodeValue
    : (function(e){
          return (!e) ? null
               : (e.nodeName.toLowerCase() == 'script') ? e
               : arguments.callee(e.lastChild);
      })(document)
    ;
&lt;/pre&gt;
&lt;br/&gt;
探索対象文書（XML, HTML）、ブラウザの種類によってXPath式で判定可能な要素名の大文字・小文字の種別に影響があるようです。&lt;br/&gt;&lt;br/&gt;
たとえば、このブログのアドレスバーで以下のブックマークレットを実行した場合、Firefox2とOpera9で挙動が異なります。IEは現時点でXPathをサポートしていないため両方ともエラーとなります。&lt;br/&gt;
XPathでscript要素を抽出し、成功したらnodeNameを表示します。&lt;br/&gt;
&lt;br/&gt;

■大文字（SCRIPT）でXPathにより要素抽出&lt;br/&gt;
○　Firefox2&lt;br/&gt;
×　Opera9&lt;br/&gt;
×　IE&lt;br/&gt;
&lt;pre class='prettyprint'&gt;
javascript: try{alert(document.evaluate('//*[local-name()="SCRIPT"]',document,null,9,null).singleNodeValue.nodeName);}catch(e){alert(e);};
&lt;/pre&gt;
&lt;button type="button" onclick="try{alert(document.evaluate('//*[local-name()=&amp;quot;SCRIPT&amp;quot;]',document,null,9,null).singleNodeValue.nodeName);}catch(e){alert(e);};"&gt;実行&lt;/button&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
■小文字（script）でXPathにより要素抽出&lt;br/&gt;
×　Firefox2&lt;br/&gt;
○　Opera9&lt;br/&gt;
×　IE&lt;br/&gt;
&lt;pre class='prettyprint'&gt;
javascript: try{alert(document.evaluate('//*[local-name()="script"]',document,null,9,null).singleNodeValue.nodeName);}catch(e){alert(e);};
&lt;/pre&gt;
&lt;button type="button" onclick="try{alert(document.evaluate('//*[local-name()=&amp;quot;script&amp;quot;]',document,null,9,null).singleNodeValue.nodeName);}catch(e){alert(e);};"&gt;実行&lt;/button&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
資料
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://d.hatena.ne.jp/amachang/20061201/1164986067"&gt;[JavaScript] とてもシンプルに自分自身が属する script 要素を取得 - IT戦記&lt;/a&gt;&lt;/li&gt;&lt;br/&gt;
&lt;li&gt;&lt;a href="http://piro.sakura.ne.jp/latest/blosxom/mozilla/xul/2007-09-13_selector-to-xpath.htm"&gt;Latest topics &gt; CSS3セレクタとXPathでの表現の対応表 - outsider reflex&lt;/a&gt;&lt;/li&gt;&lt;br/&gt;
&lt;li&gt;&lt;a href="http://developer.mozilla.org/ja/docs/Introduction_to_using_XPath_in_JavaScript"&gt;Introduction to using XPath in JavaScript - MDC&lt;/a&gt;&lt;/li&gt;&lt;br/&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5616219676826309620-8078009262598050127?l=juce6ox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juce6ox.blogspot.com/feeds/8078009262598050127/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5616219676826309620&amp;postID=8078009262598050127' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/8078009262598050127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/8078009262598050127'/><link rel='alternate' type='text/html' href='http://juce6ox.blogspot.com/2007/11/xpathdom-javascriptscript.html' title='XPath/DOM : javascriptファイルの呼び出し元script要素を取得する'/><author><name>latchet</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5616219676826309620.post-6138777280439181128</id><published>2007-11-08T23:46:00.000+09:00</published><updated>2007-11-17T11:12:46.124+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日記'/><title type='text'>XPath/DOM : Class属性による要素抽出 - クロスブラウザ document.getElementsByClassName</title><content type='html'>javascriptの優れたライブラリが近年続々と公開されています。&lt;br/&gt;
&lt;br/&gt;
幸いな事に&lt;a href="http://www.prototypejs.org/"&gt;prototype.js&lt;/a&gt;、&lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;、そして最近ではさらに&lt;a href="http://d.hatena.ne.jp/amachang/"&gt;amachang&lt;/a&gt;さんによる&lt;a href="http://amachang.art-code.org/ejohn/"&gt;ライブラリ&lt;/a&gt;によってjavascriptによるDOM要素抽出が気軽に見通しよく記述することができる環境が整っているようです。&lt;br/&gt;
&lt;br/&gt;
車輪の再実装ですがタグ名とクラス名を指定してDOM要素抽出を行なうという用途のための小さなコードを書きました。既存ライブラリを使わない小さなサイズのスクリプトでちょっとしたDOM操作のために。&lt;br/&gt;
&lt;br/&gt;
使い方はgetBoxes(klass, tag)　でクラス属性値klass、タグ名tagのDOM要素を配列にして抽出します。tagを省略すると、指定されたクラス属性値を持つ全てのタグを抽出します。
たとえば、getBoxes('test', 'div') では、testをクラス属性値に持つタグ名divの要素を配列で返します。&lt;br/&gt;
&lt;br/&gt;
■追記：2007/11/12&lt;br/&gt;
getBoxes(klass, tag, context) のように第３引数にDOM要素を指定すると、その要素と子孫要素が探索対象範囲となる機能を追加しました。第３引数を指定しなければページ内の全要素が探索対象となります。&lt;br/&gt;
XPathを使用する場合、XPath式とnamespace resolver（ここでは、nullです）から生成されるオブジェクトを保存し再利用するようにしました。
&lt;br/&gt;
&lt;br/&gt;
&lt;pre class="prettyprint"&gt;
var getBoxes
    = (/Firefox\/(\d+)/.test(navigator.userAgent) &amp;&amp; RegExp.$1 &gt; 2) ?
          (function(){
              var toChangeCase = (document.documentElement.nodeName == 'HTML')
                               ? 'toUpperCase' : 'toLowerCase';
              return function(klass, tag, context){
                  var boxes = (context || document).getElementsByClassName(klass);
                  return (tag &amp;&amp; (tag = tag[toChangeCase]()))
                       ? Array.filter(boxes, function(e){return e.nodeName == tag;})
                       : boxes;
              };
          })()
    : (document.implementation &amp;&amp; document.implementation.hasFeature &amp;&amp; document.implementation.hasFeature('XPath', '3.0')) ?
          (function(){
              var toChangeCase = (document.evaluate('//*[local-name()="HTML"]', document, null, XPathResult.BOOLEAN_TYPE, null).booleanValue)
                               ? 'toUpperCase' : 'toLowerCase',
                  cache = {};
              return function(klass, tag, context){
                  var boxes = [],
                      key   = (tag || '*') + ':' + klass,
                      exp   = cache[key] || 
                             (cache[key] = document.createExpression('//*'
                            + (tag ? ('[local-name()="' + tag[toChangeCase]() + '"]') : '')
                            + '[contains(concat(" ",@class," ")," ' + klass + ' ")]', null)),
                      nodes = exp.evaluate(context || document, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null),
                      node,
                      i = 0;
                  if(nodes)
                      while(node = nodes.iterateNext())
                          boxes[i++] = node;
                  return boxes;
              };
          })()
    :     function(klass, tag, context){
              var boxes = [],
                  regex = new RegExp('(?:^|\\s)' + klass + '(?:\\s|$)'),
                  i = 0;
              /*@cc_on
              if(@_jscript_version &gt; 5.5 || @_mac || tag || !context){
                @*/
              var nodes = /*@cc_on (@_jscript_version &lt; 5.6 &amp;&amp; !@_mac &amp;&amp; !tag &amp;&amp; !context) ? document.all : @*/
                          (context || document).getElementsByTagName(tag &amp;&amp; tag.toLowerCase() || '*'),
                  node,
                  j = 0;
              if(nodes)
                  while(node = nodes[i++])
                      if(regex.test(node.className))
                          boxes[j++] = node;
              /*@cc_on
              }else{
                  (function walk(e){
                      if(e.nodeType == 1 &amp;&amp; regex.test(e.className)) boxes[i++] = e;
                      e = e.firstChild;
                      while(e){
                          walk(e);
                          e = e.nextSibling;
                      };
                  })(context);
              };@*/
              return boxes;
          };
&lt;/pre&gt;

&lt;br/&gt;
&lt;br/&gt;
資料&lt;br/&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://nanto.asablo.jp/blog/2007/02/04/1163210"&gt;getElementsByClassName on Gecko: Days on the Moon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.mozilla.org/ja/docs/DOM:document.getElementsByClassName"&gt;DOM:document.getElementsByClassName - MDC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.whatwg.org/specs/web-apps/current-work/#getelementsbyclassname"&gt;HTML 5&amp;nbsp;&amp;nbsp;&amp;nbsp;Working Draft&lt;/a&gt;&lt;br/&gt;Firefox3で導入されるgetElementsByClassNameの仕様・特徴について。&lt;/li&gt;&lt;br/&gt;
&lt;li&gt;
&lt;a href="http://ejohn.org/blog/getelementsbyclassname-speed-comparison/"&gt;John Resig - getElementsByClassName Speed Comparison&lt;/a&gt;&lt;br/&gt;
jQuery作者John Resigさんによるクラス属性値を指定した各種要素抽出方法の性能比較。
Firefox3で実装されるdocument.getElementsByClassNameが現状で最も高速。次いでXPath、DOMの順とのこと。
&lt;/li&gt;&lt;br/&gt;
&lt;li&gt;&lt;a href="http://ido.nu/kuma/2007/11/06/xpathevaluator-in-firefox/"&gt;FirefoxのXPathEvaluator&lt;/a&gt;&lt;br/&gt;
Firefoxに実装されているXPathEvaluatorの速度計測。
&lt;/li&gt;&lt;br/&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/google-code-prettify/"&gt;google-code-prettify - Google Code&lt;/a&gt;&lt;br/&gt;
このエントリーで使用しているjavascriptによるシンタックスハイライト・ライブラリです。
&lt;/li&gt;&lt;br/&gt;
&lt;li&gt;&lt;a href="http://www.colordic.org/w/"&gt;日本の伝統色 和色大辞典 - Japanese Traditional Color Names&lt;/a&gt;&lt;br/&gt;
こんなに多くの呼び名があることに驚きです。シンタックスカラーの参考にしました。&lt;/li&gt;&lt;br/&gt;
&lt;li&gt;&lt;a href="http://piro.sakura.ne.jp/latest/blosxom/mozilla/xul/2007-09-13_selector-to-xpath.htm"&gt;Latest topics &gt; CSS3セレクタとXPathでの表現の対応表 - outsider reflex&lt;/a&gt;&lt;br/&gt;
丁寧に詳しい説明です。&lt;/li&gt;&lt;br/&gt;
&lt;li&gt;&lt;a href="http://lowreal.net/logs/2006/03/16/1"&gt;XPath, $X function, NSResolver &lt; 16 &lt; March &lt; 2006 &lt; nulog, NULL::something : out of the headphone&lt;/a&gt;&lt;br/&gt;
XHTMLでの名前空間、XPathのNamespace Resolverについて。
&lt;/li&gt;&lt;br/&gt;
&lt;/ul&gt;
&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5616219676826309620-6138777280439181128?l=juce6ox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juce6ox.blogspot.com/feeds/6138777280439181128/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5616219676826309620&amp;postID=6138777280439181128' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/6138777280439181128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/6138777280439181128'/><link rel='alternate' type='text/html' href='http://juce6ox.blogspot.com/2007/11/xpathdomclass.html' title='XPath/DOM : Class属性による要素抽出 - クロスブラウザ document.getElementsByClassName'/><author><name>latchet</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5616219676826309620.post-7106255928427529254</id><published>2007-07-06T23:14:00.001+09:00</published><updated>2007-07-06T23:35:36.820+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日記'/><title type='text'>SHA256を利用したパスワード生成ブックマークレット</title><content type='html'>&lt;a href="http://worris.blog61.fc2.com/blog-entry-63.html"&gt;
worris' ドメイン名でMD5なパスワードを作るBookmarklet&lt;/a&gt;&lt;br/&gt;
&lt;br/&gt;
上記エントリーに触発されてパスワードを自動生成するブックマークレットを作成しました。&lt;br/&gt;


&lt;a href="javascript:void(new function(){var b=document.body,f=arguments.callee,s;if(!b)return setTimeout(f,100);s=document.createElement('script');s.type='text/javascript';s.charset='utf-8';s.src='http://juce6ox.googlepages.com/pass.js?true,1,8';b.appendChild(s)});"&gt;
&lt;pre name="code" class="js"&gt;
javascript:
void(new function(){
   var b=document.body,f=arguments.callee,s;
   if(!b)return setTimeout(f,100);
   s=document.createElement('script');
   s.type='text/javascript';
   s.charset='utf-8';
   s.src='http://juce6ox.googlepages.com/pass.js?true,1,8';
   b.appendChild(s)
});
  
&lt;/pre&gt;
&lt;/a&gt;
上記コードをクリックすると、ブックマークレットが起動します。&lt;br/&gt;
右クリックで保存できます。&lt;br/&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;h2&gt;■特徴&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;サイトのドメイン名を利用&lt;/li&gt;
&lt;li&gt;SHA256ハッシュを利用&lt;/li&gt;
&lt;li&gt;数字と大小の英字を使用したパスワードを生成&lt;/li&gt;
&lt;li&gt;パスワードにはオプションで2文字まで利用する記号を指定可能($_+=?&lt;&gt;など)※ デフォルトでは記号使用なし&lt;/li&gt;
&lt;li&gt;パスワード欄に入力済みの文字列を利用&lt;/li&gt;
&lt;li&gt;パスワード欄に自動書き込み&lt;/li&gt;
&lt;li&gt;生成されたパスワードの表示・非表示の設定&lt;/li&gt;
&lt;li&gt;パスワードの文字数設定　※最大43文字&lt;/li&gt;
&lt;/ul&gt;
&lt;br/&gt;

&lt;h2&gt;■使い方&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;パスワード欄にキーワードを入力&lt;/li&gt;
&lt;li&gt;ブックマークレット実行&lt;/li&gt;
&lt;li&gt;ドメイン名とキーワードを元に生成されたパスワードが自動で入力されます　※パスワード入力欄がある場合に&lt;/li&gt;
&lt;/ol&gt;
設定項目が５つあります。&lt;br/&gt;
ブックマークレット内の s.src の値を書き換えることで設定できます。&lt;br&gt;
pass.js?[v0],[v1],[v2],[v3],[v4]　のように?以降にカンマ区切りで書き込みます。&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;[v0]&lt;br/&gt;
パスワードのダイアログ表示[true]・非表示[false]。&lt;br/&gt;
デフォルト値＝[true]&lt;/li&gt;
&lt;li&gt;[v1]&lt;br/&gt;
SHA256ハッシュの何文字目から文字列を抽出するか指定。[0以上の整数]&lt;br/&gt;
デフォルト値＝[1]&lt;/li&gt;
&lt;li&gt;[v2]&lt;br/&gt;
パスワードの文字数&lt;br/&gt;
デフォルト値＝[8]&lt;/li&gt;
&lt;li&gt;[v3]&lt;br/&gt;
記号2文字を指定。[/=, $_, +-, &lt;&gt; など]&lt;br/&gt;
デフォルト値＝[01]&lt;/li&gt;
&lt;li&gt;[v4]&lt;br/&gt;
内部処理でドメイン名と入力文字を結びつける際の間の文字列&lt;br/&gt;
デフォルト値＝[ ]&lt;/li&gt;
&lt;/ul&gt;
&lt;br/&gt;

&lt;h2&gt;■お願い&lt;/h2&gt;
このブックマークレットは２つのjavascriptファイルをダウンロードします。
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://user1.matsumoto.ne.jp/~goma/js/sha256.js"&gt;sha256.js&lt;/a&gt;
   (from &lt;a href="http://user1.matsumoto.ne.jp/~goma/"&gt;Schwarz Lanzenreiter&lt;/a&gt; )&lt;/li&gt;
&lt;li&gt;&lt;a href="http://juce6ox.googlepages.com/pass.js"&gt;pass.js&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
セキュリティ上の観点からも上の２つのファイルをご自身の管理されるウェブスペースやローカルHDD等に配置して、コードを修正の上、ご利用ください。&lt;br/&gt;
SHA256ライブラリにつきましては&lt;a href="http://user1.matsumoto.ne.jp/~goma/readme.html"&gt;作成者の方のサイト&lt;/a&gt;をご参照の上でのご利用をお願いいたします。&lt;br/&gt;
&lt;br/&gt;
●ブックマークレット 変更箇所&lt;br/&gt;
⇒　s.src = 'pass.jsの保存場所'　（http://～、file://C:/～）&lt;br/&gt;
⇒　pass.js?[設定項目をカンマ区切りで]&lt;br/&gt;
&lt;pre name="code" class="js"&gt;
s.src='http://juce6ox.googlepages.com/pass.js?true,1,8';
  
&lt;/pre&gt;
&lt;br/&gt;
●pass.js 変更箇所&lt;br/&gt;
⇒　u = ['pass.jsの保存場所', 'sha256.jsの保存場所']&lt;br/&gt;
⇒　c = 'sha256.jsの文字コード'&lt;br/&gt;
&lt;a href="http://juce6ox.googlepages.com/pass.js"&gt;
&lt;pre name="code" class="js"&gt;
var u=['http://juce6ox.googlepages.com/pass.js',
       'http://user1.matsumoto.ne.jp/~goma/js/sha256.js'],
    c='sjis',
    
&lt;/pre&gt;
&lt;/a&gt;
&lt;br/&gt;

■作成にあたって参照したサイト一覧
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://user1.matsumoto.ne.jp/~goma/js/hash.html"&gt;
JavaScript でハッシュアルゴリズム&lt;/a&gt;&lt;br/&gt;
javascript版SHA256ライブラリ。&lt;br/&gt;このブックマークレットで利用しています。&lt;br/&gt;&lt;br/&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://labs.cybozu.co.jp/blog/takesako/2007/06/opera_img-jsonp.html"&gt;TAKESAKO @ Yet another Cybozu Labs: Operaでも非同期リクエストが並列処理できる img-JSONP&lt;/a&gt;&lt;br/&gt;
img要素を利用するOperaでのJSONPの仕方。&lt;br/&gt;&lt;br/&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://la.ma.la/blog/diary_200504140039.htm"&gt;最速インターフェース研究会 :: [Ajax] JSAN構想とリモートデータの取得とUserJavaScript&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://la.ma.la/misc/js/jsan.html"&gt;JSAN DEMO&lt;/a&gt;&lt;br/&gt;
動的ロードを監視するwait関数。&lt;br/&gt;&lt;br/&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/syntaxhighlighter/"&gt;
syntaxhighlighter - Google Code&lt;/a&gt;&lt;br/&gt;
コードをシンタックスハイライトするjavascript/cssライブラリ。&lt;br/&gt;&lt;br/&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br/&gt;


&lt;script language="javascript"&gt;dp.SyntaxHighlighter.ClipboardSwf = '/flash/clipboard.swf';dp.SyntaxHighlighter.HighlightAll('code');&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5616219676826309620-7106255928427529254?l=juce6ox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juce6ox.blogspot.com/feeds/7106255928427529254/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5616219676826309620&amp;postID=7106255928427529254' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/7106255928427529254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/7106255928427529254'/><link rel='alternate' type='text/html' href='http://juce6ox.blogspot.com/2007/07/sha256.html' title='SHA256を利用したパスワード生成ブックマークレット'/><author><name>latchet</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5616219676826309620.post-7153206276997630017</id><published>2007-07-02T05:42:00.000+09:00</published><updated>2007-07-02T05:52:49.053+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日記'/><title type='text'>夏</title><content type='html'>今年の夏も暑くなりそう。

冷夏も冷房病も嬉しくないけど、夏の暑さにも気をつけよう。
熱中症対策を今年は意識しよう。

一人住まいのお年寄りや、アスファルトの照り返しに顔が近いこどもたちは
周囲の人たちの見守りを含め、暑さ対策を心がけないと大変そう。

梅雨前から暑い日が多いし、ここ数年30度を超える日が珍しくないようになってきた印象がある・・・
ダムが渇水となりませんように。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5616219676826309620-7153206276997630017?l=juce6ox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juce6ox.blogspot.com/feeds/7153206276997630017/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5616219676826309620&amp;postID=7153206276997630017' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/7153206276997630017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/7153206276997630017'/><link rel='alternate' type='text/html' href='http://juce6ox.blogspot.com/2007/07/blog-post.html' title='夏'/><author><name>latchet</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5616219676826309620.post-6945391087764243283</id><published>2007-06-08T12:43:00.000+09:00</published><updated>2007-06-08T13:02:00.535+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日記'/><title type='text'>Webスクラップ、メモ：ScrapBook</title><content type='html'>&lt;div style="text-align: left;"&gt;FireFoxの拡張で閲覧しているサイトをローカルに保存したり
付箋づけやメモを記録できるものがあるのを知りダウンロードしました。

&lt;ul&gt;&lt;li&gt;&lt;a href="http://amb.vis.ne.jp/mozilla/scrapbook/"&gt;ScrapBook - Firefox Extension&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://potto.exblog.jp/3757456/"&gt;ぽっとの陽だまり研究室 : Webスクラップ関連&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;a href="http://www.towofu.net/soft/xtmemo.php"&gt;XTMemo&lt;/a&gt;は機能が絞られていて、検索も速く、見やすいUIなので便利に使っています。
この&lt;a href="http://amb.vis.ne.jp/mozilla/scrapbook/"&gt;ScrapBook&lt;/a&gt;も、活用の仕方によっては、メモ管理に良さそう。
少しずつ試してみます。
気に入れば移行するかな。
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5616219676826309620-6945391087764243283?l=juce6ox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juce6ox.blogspot.com/feeds/6945391087764243283/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5616219676826309620&amp;postID=6945391087764243283' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/6945391087764243283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/6945391087764243283'/><link rel='alternate' type='text/html' href='http://juce6ox.blogspot.com/2007/06/webscrapbook.html' title='Webスクラップ、メモ：ScrapBook'/><author><name>latchet</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5616219676826309620.post-2294919165336414091</id><published>2007-06-08T12:31:00.000+09:00</published><updated>2007-06-08T12:41:37.476+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日記'/><title type='text'>Webスクラップ、メモ：TiddlySnip</title><content type='html'>閲覧しているウェブサイトをTiddlyWikiの記事（Tiddler）にメモするための
FireFox拡張を見かけたので導入。
&lt;ul&gt;&lt;li&gt;&lt;a href="http://tiddlysnip.com/#About"&gt;TiddlySnip - use your TiddlyWiki as a scrapbook!&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://potto.exblog.jp/5420934"&gt;ぽっとの陽だまり研究室 : TiddlySnipを見つけちゃいました&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
同名のTiddlerが存在しているときに、
ダイアログが表示されて、
&lt;ul&gt;&lt;li&gt;記事名称の変更[Rename]&lt;/li&gt;&lt;li&gt;記事に追記[Append]&lt;/li&gt;&lt;li&gt;記事を上書き[Overwrite]&lt;/li&gt;&lt;/ul&gt;上記を選択できるのがいいな。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5616219676826309620-2294919165336414091?l=juce6ox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juce6ox.blogspot.com/feeds/2294919165336414091/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5616219676826309620&amp;postID=2294919165336414091' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/2294919165336414091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/2294919165336414091'/><link rel='alternate' type='text/html' href='http://juce6ox.blogspot.com/2007/06/webtiddlysnip.html' title='Webスクラップ、メモ：TiddlySnip'/><author><name>latchet</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5616219676826309620.post-3009226804993448193</id><published>2007-06-08T12:13:00.000+09:00</published><updated>2007-06-08T12:36:32.259+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日記'/><title type='text'>TiddlyWiki, d3 用ブックマークレット</title><content type='html'>閲覧しているサイトを、d3などTiddlyWikiでメモするためのブックマークレットを下記サイトを参考に導入しました。
FireFox用です。IEでは動きません。

&lt;ul&gt;&lt;li&gt;&lt;a href="http://mellow.de-blog.jp/clone_eye/2007/01/tiddlywiki_5104.html"&gt;mellow_blog: TiddlyWiki用のリンク作成するブックマークレット&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://d.hatena.ne.jp/amachang/20070522/1179850864"&gt;document.title の罠&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;a href="javascript:window.prompt('','[['+document.getElementsByTagName(%27title%27)[0].firstChild.nodeValue+'|'+location.href+']]');void(0);"&gt;TiddlyWiki用ブックマークレット&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5616219676826309620-3009226804993448193?l=juce6ox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juce6ox.blogspot.com/feeds/3009226804993448193/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5616219676826309620&amp;postID=3009226804993448193' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/3009226804993448193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/3009226804993448193'/><link rel='alternate' type='text/html' href='http://juce6ox.blogspot.com/2007/06/tiddlywiki-d3.html' title='TiddlyWiki, d3 用ブックマークレット'/><author><name>latchet</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5616219676826309620.post-910324746860237680</id><published>2007-06-07T21:40:00.000+09:00</published><updated>2007-06-08T10:07:51.817+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日記'/><title type='text'>GTDツール</title><content type='html'>GTDという仕事術の話題を以前からよくウェブや書店で見かけました。

それに関連するアプリケーションについての言及もはてなブックマークなどで目にします。
そんな経緯から先日、JavaScriptでつくられたWikiツールを調べました。

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.tiddlywiki.com/"&gt;TiddlyWiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://shared.snapgrid.com/"&gt;GTD TiddlyWiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.geocities.jp/wikistyle/gtd/"&gt;GTD StyleWiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.geocities.jp/wikistyle/ashika/"&gt;AshikaStyleWiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dcubed.ca/"&gt;d3&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
上記はいずれも、TiddlyWikiというHTMLファイル一つからなるWikiとその改良版。
それぞれに特徴がありますが、d3の機能が個人的には使いやすそうに感じられました。

メモ用ツールに&lt;a href="http://www.towofu.net/soft/xtmemo.php"&gt;XTMemo&lt;/a&gt;というソフトを利用しています。
このソフトはとても便利。
タグ付けも同じ題名のメモも作れるし、タグや本文の検索も簡単。

現状ではまだd3はほとんど使っていない。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5616219676826309620-910324746860237680?l=juce6ox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juce6ox.blogspot.com/feeds/910324746860237680/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5616219676826309620&amp;postID=910324746860237680' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/910324746860237680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/910324746860237680'/><link rel='alternate' type='text/html' href='http://juce6ox.blogspot.com/2007/06/gtd.html' title='GTDツール'/><author><name>latchet</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5616219676826309620.post-914361209523075649</id><published>2007-06-06T22:39:00.000+09:00</published><updated>2007-06-08T13:32:38.733+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日記'/><title type='text'>Google Mashup Editor</title><content type='html'>先日、グーグルから様々な発表がされました。

・Google Mapplets
・Google Gears
・Google Mashup Editor

その中でも、Google Mashup Editorに関する記事がまだウェブ上ではとても少ない。
現在、サービス利用できる人が限定されているためというのもあるのかな。
Google Codeにリファレンス等あり。&lt;a href="http://code.google.com/gme/index.html"&gt;http://code.google.com/gme/index.html&lt;/a&gt;
おもしろそう。
googlemashups.comのサブドメインに作成したコードがアップロードされるようだ。

Yahoo! Pipesとの相違を考察するエントリーを、今後見かけそうだ。

Google Mashup Editorはサーバサイド、Google Gearsはローカル・クライアントサイドで活躍と相互に補完的な役割を活かすような双方を用いたアプリケーションが現われるのかな。Flash9,Apollo,Google Gearsの連携する魅力的なアプリ、あっと驚き、くすっと笑いをおこすようなアイデアの登場が夏以降ありそう。楽しみ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5616219676826309620-914361209523075649?l=juce6ox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juce6ox.blogspot.com/feeds/914361209523075649/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5616219676826309620&amp;postID=914361209523075649' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/914361209523075649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/914361209523075649'/><link rel='alternate' type='text/html' href='http://juce6ox.blogspot.com/2007/06/google-mashup-editor.html' title='Google Mashup Editor'/><author><name>latchet</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5616219676826309620.post-1623303163874251486</id><published>2007-06-05T18:16:00.000+09:00</published><updated>2007-06-05T18:54:04.216+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日記'/><title type='text'>Google Gears</title><content type='html'>先日、Googleからオフライン・オンラインでブラウザ・ベースのアプリケーションを動作させる仕組みを提供するGoogle Gearsが発表された。
ローカルサーバ、データベース、ワーカープールと呼ばれるマルチスレッド機構が搭載されているようだ。
AdobeのApolloと連携したアプリケーションが今年、続々と登場するのだろう。
どのようなアイディアが世間を驚かすのか楽しみ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5616219676826309620-1623303163874251486?l=juce6ox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juce6ox.blogspot.com/feeds/1623303163874251486/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5616219676826309620&amp;postID=1623303163874251486' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/1623303163874251486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/1623303163874251486'/><link rel='alternate' type='text/html' href='http://juce6ox.blogspot.com/2007/06/google-gears.html' title='Google Gears'/><author><name>latchet</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5616219676826309620.post-4991169879633338723</id><published>2007-06-05T18:07:00.000+09:00</published><updated>2007-06-05T18:54:04.216+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日記'/><title type='text'>ねこについて</title><content type='html'>ねこはやはり寝息をたてる。
どうやらいつもじゃない。
深夜、ねこの寝息に気付いて聞いていたら、しばらくしたらやんだりした。
どういう条件で、寝息をたてたり、やんだりするのか、良く分からない。

地震の起こる30分か1時間位前に、近くにやってきて呼びかけるようにこちらを向いて声を上げた。
えさの催促ではなかった。呼びかけのあと、しばらくしたらどこかへ行ってしまったから。
地震があったときにはじっと昼寝をしていた。
振り返っておもいだすと、もしかすると、あれは地震を感知する動物の異常行動と呼ばれるものなのだろうか。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5616219676826309620-4991169879633338723?l=juce6ox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juce6ox.blogspot.com/feeds/4991169879633338723/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5616219676826309620&amp;postID=4991169879633338723' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/4991169879633338723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/4991169879633338723'/><link rel='alternate' type='text/html' href='http://juce6ox.blogspot.com/2007/06/blog-post_05.html' title='ねこについて'/><author><name>latchet</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5616219676826309620.post-7164254039706461835</id><published>2007-06-05T18:02:00.000+09:00</published><updated>2007-06-05T18:06:09.725+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='日記'/><title type='text'>景色</title><content type='html'>この時期の景色は綺麗だなあ。
青い空、白い雲、緑の葉。
だんだん暑い日が増えてきた。
今年の梅雨はいつごろからだろう。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5616219676826309620-7164254039706461835?l=juce6ox.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://juce6ox.blogspot.com/feeds/7164254039706461835/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5616219676826309620&amp;postID=7164254039706461835' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/7164254039706461835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5616219676826309620/posts/default/7164254039706461835'/><link rel='alternate' type='text/html' href='http://juce6ox.blogspot.com/2007/06/blog-post.html' title='景色'/><author><name>latchet</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
