IE Mobile を使用するデバイスで (Google Gears を使用して) オフラインで使用するアプリケーションを作成しました。デバイスでメモリ リークが発生しており、時間の経過とともにデバイスが使用できなくなります。
問題のページは、ローカルの Gears データベースからエントリを取得し、各行の最後の列にエントリを開くためのリンクを含む各エントリのテーブルをレンダリングします (リンクは単に onclick="open('myID')" です)。エントリの処理が完了すると、再レンダリングされたテーブルに戻ります。問題のように見えるのは、このテーブルを繰り返し構築することです。主に onclick イベント。
テーブルは本質的に次のように生成されます。
var tmp="";
for (var i=0; i<100; i++){
tmp+="<tr><td>row "+i+"</td><td><a href=\"#\" id=\"LINK-"+i+"\""+
" onclick=\"afunction();return false;\">link</a></td></tr>";
}
document.getElementById('view').innerHTML = "<table>"+tmp+"</table>";
メモリリークの一般的な原因を読み、テーブルを再レンダリングする前に各リンクの onclick イベントを「null」に設定しようとしましたが、それでもリークしているようです。
誰かアイデアはありますか?
重要な場合、各リンクから呼び出される関数は次のようになります。
function afunction(){
document.getElementById('view').style.display="none";
}
それは何らかの形で循環参照を構成しますか?
ジェイク