2

ユーザーがスタンドアロン Web アプリを起動したときに、iDevice にデータベースとそのテーブルをセットアップする次のコードがあります。Safari を搭載したデバイスでコードを使用すると問題なく動作しますが、Chrome で開くと次のエラーがスローされます。

Uncaught Error: INVALID_STATE_ERR: DOM Exception 11

エラーに加えて、これもChromeでのみ、他の機能が機能しなくなります。テーブルを作成する関数を含むコードを次に示します。Chrome がエラーを示している行のコードにコメントを追加しました。

//this sets up the DB name global variable and uses it to open the DB
        var dbName = 'CBNapp',
        db = openDatabase(dbName, '1.0', dbName, 65536);// chrome error = UncaughtError: INVALID_STATE_ERR: DOM Exception 11 (anonymous function) line 43
//            db = openDatabase(dbName, '1.0' /*version*/, dbName, 65536 /*max size*/);
//opens the database when the document is loaded
$(document).ready(openCBNappDB);

function openCBNappDB(){
//this if statement checks to see if device supports offline storage
    if ( !window.openDatabase ) {
        $('add_note').innerHTML = "Browser does not support local storage."
        return;
    }
// create tables in the DB
    function dbTransaction(fn) {
       db.transaction(fn);
    }
    /*create 5 tables*/ //colums in tables are not correct as of apr 25 2012
    dbTransaction(
        function (tx) {
        tx.executeSql('CREATE TABLE CBNapp_Usage (key INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, MemberID TEXT NOT NULL DEFAULT "", NewKnife INTEGER NOT NULL DEFAULT 0, True INTEGER NOT NULL DEFAULT 0, Trivia INTEGER NOT NULL DEFAULT 0, Movies INTEGER NOT NULL DEFAULT 0, Jokes INTEGER NOT NULL DEFAULT 0, Musings INTEGER NOT NULL DEFAULT 0, Stories INTEGER NOT NULL DEFAULT 0);');
    tx.executeSql('CREATE TABLE CBNapp_Members (key INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, MemberID TEXT NOT NULL DEFAULT "", CBNname TEXT NOT NULL DEFAULT "", Community TEXT NOT NULL DEFAULT "", BirthDay TEXT NOT NULL DEFAULT "", BirthMonth TEXT NOT NULL DEFAULT "", Gender TEXT NOT NULL DEFAULT "Male", iOS TEXT NOT NULL DEFAULT "", Device TEXT NOT NULL DEFAULT "");');
    tx.executeSql('CREATE TABLE CBNapp_Scores (key INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, MemberID TEXT NOT NULL DEFAULT "", GameName TEXT NOT NULL DEFAULT "", TimesPlayed INTEGER NOT NULL DEFAULT 0, HiScore INTEGER NOT NULL DEFAULT 0 );');
    tx.executeSql('CREATE TABLE CBNapp_UserPrefs (key INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, MemberID TEXT NOT NULL DEFAULT "", TextSize INTEGER NOT NULL DEFAULT 14, AutoRetrieve INTEGER NOT NULL DEFAULT 0 );');
    tx.executeSql('CREATE TABLE CBNapp_Errors (key INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, MemberID TEXT NOT NULL DEFAULT "", code INTEGER NOT NULL, message TEXT NOT NULL );');
    }
);
}

これを Chrome と Safari で適切に動作させるための特定の解決策を誰かが提案できれば、それは大歓迎です。

スクリプトで他にも多くのエラーを犯したと確信しています。誰かが私がそれをどのように改善すべきかを私に示すために時間をかけたいと思っているなら、私はどんなアイデアにもとても感謝しています. 私はこれに非常に慣れていないので、具体的な提案をお願いします。

4

1 に答える 1

0

HTML を知らずに確実に言うのは難しいですが、chrome には window オブジェクトに割り当てられた openDataBase メソッドがなく、いくつかの悪い JQuery に分岐していると思います。

$('add_note').innerHTML = "Browser does not support local storage."

「add_note」は無意味です。add_note がクラスである場合、'.add_note'または'#add_note'ID である必要があります。

また、JQueryなのでおそらくinnerHTMLメソッドはありません。IDがおそらく次のようになると仮定した場合の最も簡単な修正:

$('#add_note')[0].innerHTML = "Browser does not support local storage."

しかし、それがテキスト入力のようなフォーム要素である場合、それは破綻する可能性があります。

于 2012-04-30T23:28:10.637 に答える