
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'), '&amp;'); param = param.replace(new RegExp('"', 'g'), '&quot;'); 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