JavaScript だけで Shift_JIS/EUC-JP のページから UTF-8 に変換して POST する方法2009-04-16
1 個前のエントリで、JavaScript だけを用いて、任意の文字コードのページから、UTF-8 エンコーディングで任意のサーバに (クロスドメインして) POST する方法を編み出しました。
その部分だけで需要があるのではないかと思ったので、関数として取り出して公開します。
案外スマートに書けたのでご機嫌です。
こんな感じです。
http://server... と、param の部分を書き換えれば、好きなサーバに好きなパラメータを渡せますね。
POST 先のサーバが重い時は、setTimeout の 5000 の値をもう少し大きめに取った方がいいかもしれません。
簡単に技術的な説明もしておきましょうか。
基本的には、iframe を新規で作成すると、その文字コードがデフォルトで UTF-8 として処理される事を利用しています。
iframe の中身は当初 DOM で構築しようとしたのですが、うまくいかず、document.write で構築しています。
iframe 内で window.onload しているのは、これまた直接 script タグ内で submit しようとすると、その時点では iframe の DOM 構築が完了しておらず、submit 出来ないためです。
iDoc.close(); しないと、DOM が構築されないのではないかと予想されます。
その部分だけで需要があるのではないかと思ったので、関数として取り出して公開します。
案外スマートに書けたのでご機嫌です。
function postUtf8(param)
if (!param) return;
param = param.replace(new RegExp('&', 'g'), '&');
param = param.replace(new RegExp('"', 'g'), '"');
param = param.replace(new RegExp('<', 'g'), '&lt;');
param = param.replace(new RegExp('>', 'g'), '&gt;');
var d = document;
var i = d.createElement('iframe');
i.style.display = 'none';
d.body.appendChild(i);
var iDoc = i.contentWindow.document;
iDoc.open();
iDoc.write('<form method="POST" action="http://server/path/file">');
iDoc.write('<input type="hidden" name="param" value="' + param + '" />');
iDoc.write('</form>');
iDoc.write('<script>window.onload = function(){document.forms[0].submit();}</script>');
iDoc.close();
setTimeout(function() {
d.body.removeChild(i);
}, 5000);
}
こんな感じです。
http://server... と、param の部分を書き換えれば、好きなサーバに好きなパラメータを渡せますね。
POST 先のサーバが重い時は、setTimeout の 5000 の値をもう少し大きめに取った方がいいかもしれません。
簡単に技術的な説明もしておきましょうか。
基本的には、iframe を新規で作成すると、その文字コードがデフォルトで UTF-8 として処理される事を利用しています。
iframe の中身は当初 DOM で構築しようとしたのですが、うまくいかず、document.write で構築しています。
iframe 内で window.onload しているのは、これまた直接 script タグ内で submit しようとすると、その時点では iframe の DOM 構築が完了しておらず、submit 出来ないためです。
iDoc.close(); しないと、DOM が構築されないのではないかと予想されます。
カテゴリ: Development タグ: utf-8 javascript