2013-08-06 5 views
1

웹 저장소의 크기 제한에 도달하면 Mobile Safari (및 Android 브라우저)에서 저장소 크기를 늘리라는 메시지가 표시됩니다. 그런 일이 발생하면 트랜잭션, onSuccess 콜백 또는 onError 콜백이 실행되지 않습니다. 어떤 예외도 여기에서 잡을 수는 없으므로 저장소를 늘리라는 메시지를 어떻게 처리해야합니까?증가 된 웹 저장 용량에 대한 프롬프트를 처리하는 방법은 무엇입니까?

모든 작업은 비동기식이므로 시간 초과를 설정하고 잠시 후 트랜잭션이 완료되었는지 확인하면됩니다. 물론 불쾌한 버그에 휩싸인 해킹입니다. 그리고 그 외에도 공간이 증가했는지 여부를 실제로 확인하기 위해 트랜잭션을 다시해야합니다.

// open the jsfiddle in safari 

    // refuse when prompted to increase space to show the bug 
    db.transaction(function (tx) { 
     tx.executeSql("INSERT INTO key_value(key, value) VALUES(?,?);", ["mykey", buildBigString(3*Math.pow(10,6))], function (tx, result) { 
     // will never be called 
     done(); 
     }, function (tx, error) { 
     // will never be called 
      done(); 
     }); 
    }); 
+0

관련 : http://stackoverflow.com/questions/15066203/websql-transaction-does-rollback-if-size-limit -is-reached – oligofren

답변

1

상기 코드의 문제점

Fiddle for verifying on mobile browser

내가 SQL 삽입 배치 트랜잭션에 대한 에러 콜백 누락되었음을 기본적이었다. 일반적으로 사용자 프롬프트를 실제로 처리하는 방법에 대한 자세한 내용은 elaborated blog post on the matter을 참조하십시오. specification on the Asynchronous Database API

void transaction(in SQLTransactionCallback callback, 
       in optional SQLTransactionErrorCallback errorCallback, 
       in optional SQLVoidCallback successCallback); 

가입일

없음 예 코드는 없었다 등 I 콜백없이 사용 된 방법 transaction 가정에 보관.

그래서 대신 수행

db.transaction(function (tx) { 
// if this prompts the user to increase the size it will not execute the sql or run any of the callbacks 
tx.executeSql('INSERT INTO foo (id, text) VALUES (1, createReallyBigString('4MB')', onComplete, onError); 
}); 

를 작성하는이

// Note the reverse order of the callbacks! 
db.transaction(function (tx) { 
// this will prompt the user to increase the size and the sql will not be executed 
tx.executeSql('INSERT INTO foo (id, text) VALUES (1, createReallyBigString('4MB')'); 
}, onError, onComplete); 
+0

Thx man! 많은 도움을! – Ostkontentitan

+0

위대한 그것은 누군가 도움이 듣고 upvote 주셔서 감사합니다 :) – oligofren