« メモ: ランキング その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:
この記事へのトラックバック一覧です: 右クリックで「数値参照デコード」:



