2012-10-25 16 views
5

Mam utworzony projekt HTML5/JQuery przy użyciu szablonu phonegap. Próbuję przechowywać informacje w lokalnej bazie danych. Obecnie używam symulatora ElectricMobileStudio2012 w celu przetestowania. Otrzymuję błąd "Security_ERR: DOM Exception 18" na tej linii kodu:Security_ERR: DOM Exception 18 openDatabase() przy użyciu Phonegap

var db = window.openDatabase("MobileInspection", "1.0", "Mobile Inspection Database", 200000); 

Oto mój kod. Zostałem zatrzymany w tej sprawie przez kilka dni, a ja nawet nie próbował za pomocą tych linii kodu, aby ominąć błąd:

navigator.openDatabase = window.openDatabase = DroidDB_openDatabase; 

window.droiddb = new DroidDB(); 

Tu jest mój kodu:

function SaveUserInfoLocally(data) { 
    try { 
     var rememberMe = $('#chkRememberMe').is(':checked') 
     if (rememberMe) { 
      // TODO: Save user details in local db. 
      //navigator.openDatabase = window.openDatabase = DroidDB_openDatabase; 
      //window.droiddb = new DroidDB(); 
      var db = window.openDatabase("MobileInspection", "1.0", "Mobile Inspection Database", 200000); 
      db.transaction(populateUsersTable, errorCB, successCB); 
      db.transaction(queryDB, errorCB); 
     } 
    } 
    catch (error) { 
     alert(error); 
    } 
} 

function populateUsersTable(tx) { 
    try { 
     var userName = window.localStorage.getItem("UserName"); 
     var firstName = window.localStorage.getItem("FirstName"); 
     var lastName = window.localStorage.getItem("LastName"); 
     //alert(userName + " " + firstName + " " + lastName); 
     tx.executeSql("DROP TABLE IF EXISTS UserDetails"); 
     tx.executeSql("CREATE TABLE IF NOT EXISTS UserDetails (UserName, FirstName, LastName)"); 
     tx.executeSql("INSERT INTO UserDetails (UserName, FirstName, LastName) VALUES ('" + userName + "', '" + firstName + "', '" + lastName + "')"); 
     alert("populate"); 
    } 
    catch (exception) { 
     alert(exception); 
    } 
} 

function errorCB(err) { 
    alert("Error processing: " + err); 
} 

function successCB() { 
    alert("success!"); 
} 

function queryDB(tx) { 
    try { 
     tx.executeSql('SELECT * FROM UserDetails', [], querySuccess, errorCB); 
    } 
    catch (exception) { 
     alert(exception); 
    } 
} 

// Testing 
function querySuccess(tx, results) { 
    try { 
     if (results) { 
      alert("records"); 
     } 
     else { 
      alert(results); 
     } 
    } 
    catch (exception) { 
     alert(exception); 
    } 
} 

Odpowiedz

3

miałem podobny problem - stąd też natknąłem się na tę kwestię.

Upewnij się, że wszystkie połączenia localStorage wykonuje w deviceready bloku:

document.addEventListener("deviceready", onDeviceReady, false); 

function onDeviceReady() { 
    //do ALL your localstorage stuff here 
} 
+0

Ja to się, ale nigdy nie był nazywany ... – ekatz

+0

Skąd dodać to? Jak testujesz to? Jeśli przetestujesz go w normalnej przeglądarce, nigdy się nie uruchomi. – Fraccus

+0

Tak, naprawiłem to. – shamittomar

Powiązane problemy