« メモ: ランキング その2 | トップページ | Twitter クライアント chirrup 1.90版 ― はてなフォトライフ対応、検索機能追加、などなど »
2008.02.29
右クリックで「数値参照デコード」
ないと困る場面が出てきたので、作ってみました。やっつけで作ったので、ソースはかなり適当ですが、いちおう動作確認済みです。IE7 と IE6 で、そのまま動くと思います。他のブラウザで動かしたい人は、適当に修正して使ってください。
『右クリックで「数値参照デコード」』を使おうとしているところ
以下、ソースコードです。(Version 1.0 のバグを発見。修正した版 Version 1.1 に差し替えました)
<meta http-equiv="Content-type" content="text/html; charset=UTF-8"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <script type="text/javascript" language="JavaScript"> // 「右クリックで 数値参照デコード」 // written by H.Tsujimura (tsupo at na.rim.or.jp) // // Version 1.1 29 Feb 2008 最後の2文字欠けることがあるバグを修正 // Version 1.0 28 Feb 2008 最初の版 function setSelection(v) { if ( str ) obj.document.selection.createRange().text = v; } function hexNum(c) { var n = 0; if ( (c >= '0') && (c <= '9') ) return ( Number(c) ); if ( (c >= 'A') && (c <= 'F') ) n = Number(c - 'A') + 10; else if ( (c >= 'a') && (c <= 'f') ) n = Number(c - 'a') + 10; return ( n ); } function decodeNumber(s) { var t = ""; var len = s.length; var n = 0; var mode = false; var inner = false; if ( len <= 3 ) return ( s ); for ( i = 0; i < len - 2; i++ ) { var c1 = s.charAt(i); if ( !inner ) { var c2 = s.charAt(i + 1); var c3 = s.charAt(i + 2); if ( (c1 == '&') && (c2 == '#') ) { if ( c3 == 'x' ) { mode = true; i++; } i++; inner = true; } if ( !inner ) t += c1; continue; } if ( c1 == ';' ) { inner = false; mode = false; t += String.fromCharCode(n); n = 0; continue; } if ( !mode ) n = n * 10 + Number(c1); // 10進数 else n = n * 16 + hexNum(c1); // 16進数 } if ( i <= len - 2 ) { for ( ; i < len; i++ ) t += s.charAt(i); } return ( t ); } obj = external.menuArguments; // 右クリック時の引数オブジェクト str = obj.document.selection.createRange().text; // 選択されている文字列 s = decodeNumber(str); setSelection(s); </script>
追記
textarea に対して上記スクリプトを適用したい場合は、contexts の値を 63 (0x0000003f) でレジストリに登録してください。
投稿者: tsupo 2008.02.29 午前 12:35
| 固定リンク
|
|
|
|
|
アマゾンわくわく探検隊
トラックバック
この記事のトラックバックURL:
この記事へのトラックバック一覧です: 右クリックで「数値参照デコード」: