JavaScriptのみで任意の文字コードのURIエンコードを試みる

JavaScriptのみで任意の文字コードURIエンコードを試みました。ecl.jsというものが既にあり、それを使用すれば問題ありませんが、別のアプローチで変換しようとしました。
結果として、IE(dataスキーム未対応ブラウザ)でdecodeできませんでした。以下のリンクがテストページです。

理屈

submitするとクエリの値がそのページの文字コードでencodeされるのでsubmit後のアドレスから取ればいけそう

魂胆

  1. iframeを生成
  2. document.writeでiframe内にformを生成
  3. input type="hidden"のvalueにエンコしたい文字をセット
  4. iframe内のロードが完了したらmethod="get"でsubmit
  5. iframe内のページが遷移したらlocation.hashをいただく

試行錯誤

form actionにabout:blankを指定しましたがうまくいきませんでした。data:text/html,と指定したらFirefoxで成功しましたが、ほかのブラウザでうまくいきませんでした。仕方ないので同じドメイン内にcall.htmlというHTMLを置いて、そこに飛ぶようにしました。call.htmlはwindow.parentにアクセスして、location.hashの値を渡します。非同期的にならざるを得ないので、encode関数は戻り値ではなくcallbackという形になりました。
UTF-16がなぜかうまくいかなかったのでcharCodeAtの値を使いました。
decodeはdataスキームを使う以外に思いつきませんでした。IEはdataスキームに対応してないのでうまくいきません。取り方はiframe srcに"data:text/plain;charset=文字コード名,エンコードされた値"を指定して、内部にアクセスするというやり方です。XHRでとろうとしたら失敗しました。

ecl.jsでよか

はい