web-dev-qa-db-ja.com

ブラウザで「メモリ不足例外」を処理中にエラーが発生しましたか?

大量のメモリを使用するjavascript/html5 Webアプリをデバッグしています。時々、コンソールウィンドウにエラーメッセージが表示される

"uncaught exception: out of memory".  

アプリ内でこのエラーを適切に処理する方法はありますか?

最終的には、これが最初に起こるのを防ぐために、この部分を書き直す必要があります。

20
user547794

LocalStorageのサイズを計算する必要があります。window.localStorageはいっぱいです

解決策は何かを追加しようとすることです

var localStorageSpace = function(){
    var allStrings = '';
    for(var key in window.localStorage){
        if(window.localStorage.hasOwnProperty(key)){
            allStrings += window.localStorage[key];
        }
    }
    return allStrings ? 3 + ((allStrings.length*16)/(8*1024)) + ' KB' : 'Empty (0 KB)';
};

var storageIsFull = function () {
    var size = localStorageSpace(); // old size

    // try to add data
    var er;
    try {
         window.localStorage.setItem("test-size", "1");
    } catch(er) {}

    // check if data added
    var isFull = (size === localStorageSpace());
    window.localStorage.removeItem("test-size");

    return isFull;
}
5

最近、多くのJSを含むプロジェクトでJsonを送信するときに同じエラーメッセージが表示されましたが、解決策は、input type = "submit"属性をinput type = "button"に更新することでした。 input type = "button" ..>の使用には制限があり、ソリューションは奇妙に見えますが、アプリケーションにJS、Jsonデータを含むajaxがある場合は、試してみてください。ありがとう。

4
safian syed

Firefoxで同じ問題に直面した後、ifループ内のローカルストレージにデータを設定する前であっても、HTMLページをリロードしようとしていたことがわかりました。そのため、その1つを処理し、IDが繰り返されているかどうかを確認する必要があります。

ただし、Chromeでも同じことがうまくいきました。たぶんChromeはよりインテリジェントです。

1
Shasha