仅在 Chrome 中出现 JavaScript 错误,在 Safari 中运行正常?

标签 javascript google-chrome web-applications iphone-web-app

当用户启动独立 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 上正常工作,我们将不胜感激。

我确信我在脚本中也犯了很多其他错误。如果有人愿意花时间告诉我应该如何改进它,我将非常感谢任何想法。我对此很陌生,请提出具体建议。

最佳答案

在不知道 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."

但是如果它是一个像文本输入这样的表单元素,那可能会失败。

关于仅在 Chrome 中出现 JavaScript 错误,在 Safari 中运行正常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10391587/

相关文章:

.net - 用户 'DOMAIN\MACHINENAME$'登录失败

java - JSTL 相当于 jsp 标签

java - 编译并升级到JDK 1.7

javascript - 无法从 JS 获取数组到我的 Spring 引导 Controller ?

javascript - 使用 For-In 循环计算数组值

google-chrome - Chrome 工作区 - 保存“源”选项卡中的更改,但不保存“元素”中的更改

macos - Chrome /火狐 : access source of an extension

node.js - Selenium/WebdriverIO Chrome headless ?

javascript - 按角色/权限为用户授权 React 组件

javascript - 使用 angularjs 渲染星级评分系统