以前、IEでJavaScriptが重かったので、なんとか速くならないものかと探していたときに見つけた記事です。
一行で IE の JavaScript を高速化する方法
d.hatena.ne.jp/amachang/20071010/1192012056
[追加するコード]
/*@cc_on _d=document;eval('var document=_d')@*/
簡単に説明すると、IEはdocumentを参照するときに呼び出されるwindowsオブジェクトの内部メソッドが重いらしく、documentを変数にすれば良い、とのことです。
詳しくは上記のブログを参照してください、検証や応用方法についても書かれています。
うーん、素晴らしい!
自分にもこういう発想があればよいのですが(笑)
PR
AJaxで画像をアップロードする方法はすでに有名ですが、検索でヒットしづらかったのでメモをば。
ずばり、「見えないインラインフレームにPOSTする」です。
はい、AJaxではありませんね(笑)
[hoge.html]
<form action="uploadImage.php" method="post" name="hoge" enctype="multipart/form-data" target="targetFrame">
<input type="file" name="image" id="image" />
<input type="submit" value="アップロード" />
</form>
<!-- POST先のインラインフレーム -->
<iframe name="targetFrame" style="display: none;"></iframe>
問題は「アップロードした画像をどうやって非同期に表示させるか」ですよね。
これを実現するには、hoge.htmlでアップロード完了のタイミングを受け取る必要があります。
自分は、上記の例でいうところのuploadImage.phpのさいごに下記のJavaScriptを追加することで実現しました。
[uploadImage.php]
<?php
//画像のアップロード処理
?>
<!-- 親のフレームにある描画関数をたたく! -->
<script language="JavaScript" type="text/javascript">
window.parent.viewImage();
</script>
これならアップロードが終わったときに再描画してくれるので、アップロード→再描画の流れが完成します。
ちなみに、AJaxで画像のアップロードをする方法もあるらしいですよ。