Автономное хранилище HTML5 не работает

Это код из примера W3C для автономного веб-хранилища: http://www.w3.org/TR/offline-webapps/

<!DOCTYPE html>
<html>
  <head>
    <script type="text/javascript" charset="utf-8">
        function renderNote(row) {
          console.log(row);
        }
        function reportError(source, message) {
          console.log("err");
        }

        function renderNotes() {
          db.transaction(function(tx) {
            tx.executeSql('CREATE TABLE IF NOT EXISTS Notes(title TEXT, body TEXT)', 
              []);
            tx.executeSql('SELECT * FROM Notes', [], function(tx, rs) {
              for(var i = 0; i < rs.rows.length; i++) {
                renderNote(rs.rows[i]);
              }
            });
          });
        }

        function insertNote(title, text) {
          db.transaction(function(tx) {
            tx.executeSql('INSERT INTO Notes VALUES(?, ?)', [ title, text ],
              function(tx, rs) {
                // …
              },
              function(tx, error) {
                reportError('sql', error.message);
              });
          });
        }
    </script>
  </head>
  <body>
  </body>
</html>

Журнал консоли вообще не выводится. В чем дело?


person maxhud    schedule 26.03.2013    source источник


Ответы (2)


Создание экземпляра БД и выполнение функции отсутствовали.

Проверьте этот JSfiddle: http://jsfiddle.net/Ax5d7/4/

JavaScript

var db = openDatabase("notes", "", "The Example Notes App!", 1048576);

function renderNote(row) {
    console.log(row);
}

function reportError(source, message) {
    console.log("err");
}

function renderNotes() {
    db.transaction(function(tx) {
        tx.executeSql('CREATE TABLE IF NOT EXISTS Notes(title TEXT, body TEXT)', 
        []);

        tx.executeSql('SELECT * FROM Notes', [], function(tx, rs) {
            for(var i = 0; i < rs.rows.length; i++) {
                renderNote(rs.rows[i]);
            }
        });
    });
}

function insertNote(title, text) {
    db.transaction(function(tx) {
        tx.executeSql('INSERT INTO Notes VALUES(?, ?)', [ title, text ],
        function(tx, rs) {
            // …
        },
        function(tx, error) {
            reportError('sql', error.message);
        });
    });
}

renderNotes();

Еще проще

var db = openDatabase("notes", "", "The Example Notes App!", 10000);

db.transaction(function(t) {
    //t.executeSql("DROP TABLE Notes");
    t.executeSql("CREATE TABLE IF NOT EXISTS Notes(title TEXT, body TEXT)");
    t.executeSql("INSERT INTO Notes VALUES(?, ?)", [ 'title', 'content' ]);
});
person Community    schedule 26.03.2013

обратите внимание, что http://www.w3.org/TR/webdatabase/ больше не поддерживается, и поддержка может быть прекращена в будущих версиях.

http://www.w3.org/TR/webstorage/#storage — это путь...

См. caniuse.com для таблицы поддержки браузеров.

person HolgerJeromin    schedule 26.03.2013
comment
webstorage не является заменой webSQL IndexedDB. localStore — это хранилище данных типа "ключ-значение" с очень ограниченным использованием. IndexedDB прямо сейчас менее поддерживается, чем webSQL, и в целом отстой, попробуйте выполнить левое соединение в IndexedDB, и вы поймете, что я имею в виду. - person Astronaut; 27.03.2013