Search code examples
javascriptsecuritytizen

Error: SecurityError: DOM Exception 18 Tizen


I'm trying to insert data in my local database. When I get to opening the db it give me that error. I searched and found that it must be in a try catch block. I did it but still the same problem.

var APP_ID = "C44F83E2-6CCA-9BAD-FF5A-CE8C869F7300";
var SECRET_KEY = "39C7F777-F0A0-4DEB-FF35-D147FB5BEB00";
var VERSION = "v1";
var categories = [] ;
var createStatement = "CREATE TABLE IF NOT EXISTS categories(id INT NOT NULL PRIMARY KEY"
  +",name VARCHAR(36) NOT NULL  "
  +",iconName VARCHAR(20) NOT NULL"
  +",category VARCHAR(19) NOT NULL"
  +",score INT NOT NULL)";

var selectAllStatement = "SELECT * FROM categories";

var insertStatement = "INSERT INTO categories(name,category,iconName,score) VALUES (?,?,?,?)";

var dropStatement = "DROP TABLE categories";
var current_item=0;
var total_item=2;
var db;
//database varsion setting
var version = 1.0;
//database name setting
var dbName = "GuessWhat";
//database display name setting
var dbDisplayName = "Guess_What_db";
//database size setting
var dbSize = 2 * 1024 * 1024;

function selectDB() {
if (window.openDatabase) {
  //openDatabase(name, version, displayname, estimatedsize, callback);
  try {
    db = openDatabase(dbName, version, dbDisplayName, dbSize);
    } catch (e) {
        // TODO: handle exception
        console.log(e);
    }


  dropTable(db);
  createTable(db);
  console.log("test base");
  for(var c in categories)
    {console.log(categories[c].getName());
          insertData(db,categories[c].getName()+"",categories[c].getCategory()+"",categories[c].getIconName()+"",categories[c].getScore()); 
  }
  //inserting data in table

  console.log("success");

} else {
  alert("Web SQL Database not supported in this browser");
}
};
function createTable(db) {
try {
  db.transaction(function (t) {
        t.executeSql(createStatement, []);
    });
} catch (e) {
// TODO: handle exception
}

};
function insertData(db, name,category ,iconName,score) {
try {
   db.transaction(function (e) {
        console.log("start insert");
        e.executeSql(insertStatement,[name,category,iconName,score], onSuccess, onError);
    });
} catch (e) {
// TODO: handle exception
console.log(e);
}

};
function onSuccess(e) { };
function onError(e) {console.log("erreur insertion"); };
function dropTable(db) {
try {
   db.transaction(function (e) {
        e.executeSql(dropStatement);
    });
  } catch (e) {
 // TODO: handle exception
 }

 };
window.onload = function () {
// TODO:: Do your initialization job
Backendless.initApp( APP_ID, SECRET_KEY, VERSION );
fetchingFirstPageAsync();

selectDB();
// add eventListener for tizenhwkey
document.addEventListener('tizenhwkey', function(e) {
    if(e.keyName == "back")
try {
    tizen.application.getCurrentApplication().exit();
} catch (ignore) {
}
});

navigation("DOWN");

document.addEventListener('keydown', function(e) {
    switch(e.keyCode){
    case TvKeyCode.KEY_LEFT: //LEFT arrow       
        break;
    case TvKeyCode.KEY_UP: //UP arrow
        navigation("UP");
        break;
    case TvKeyCode.KEY_RIGHT : //RIGHT arrow        
        break;
    case TvKeyCode.KEY_DOWN: //DOWN arrow
        navigation("DOWN");         
        break;
    case TvKeyCode.KEY_ENTER: //OK button
        go_to(current_item);
        console.log("ENTER Button");
        break;
    default:
        console.log("Key code : " + e.keyCode);
        break;          
    }
});

};

function tester(){
console.log("TESTTTTTTT");
};

function navigation(direction){
$("#btn_"+current_item).removeClass("selected_btn");
if(direction == "UP"){
    if(current_item == 1)
        current_item = total_item;
    else
        current_item--;

}else if(direction == "DOWN"){
    if(current_item == total_item)
        current_item = 1;
    else
        current_item++;
}
$("#btn_"+current_item).addClass("selected_btn");
};

function go_to(current_item){
sessionStorage.setItem("key", current_item);
if(current_item==2)
    parent.location="about.html";
if(current_item==1){
    console.log("redirection");
    parent.location="menu.html";
}
};
function fetchingFirstPageAsync(){
var startTime = (new Date()).getMilliseconds();
var c = Backendless.Persistence.of("CategoriesObject").find();
console.log("============ Fetching first page using the SYNC API ============");
console.log( "Loaded " + c.data.length + "restaurant objects" );
console.log( "Total restaurants in the Backendless storage - " + c.totalObjects);

for(var i = 0; i < c.data.length; i++) {
    categories.push(new Category(c.data[i].name+"",c.data[i].iconName+"",c.data[i].score+"",c.data[i].category+""));
    console.log(c.data[i].category) ;

}
for (var i in categories) {

    console.log(categories[i].getName());
}

console.log("Total time (ms) - " + ((new Date()).getMilliseconds() - startTime ));
};

Solution

  • According to the document, currently the WebSQL is supported in mobile application only. I tried it in Wearable Gear but it didn't work. It worked in mobile.

    main.js

           var db;
            //database version setting
            var version = 1.0;
            //database name setting
            var dbName = "tizendb";
            //database display name setting
            var dbDisplayName = "tizen_test_db";
            //database size setting
            var dbSize = 2 * 1024 * 1024;
    
            function selectDB() {
                if (window.openDatabase) {
                    //openDatabase(name, version, displayname, estimatedsize, callback);
                    db = openDatabase(dbName, version, dbDisplayName, dbSize);
    
                    dropTable(db);
                    createTable(db);
    
                    //inserting data in table
                    insertData(db, "tizenTest01", "We are pleased to announce that Tizen 2.0");
                    insertData(db, "tizenTest02", "device vendors. We encourage you to download");
                    insertData(db, "tizenTest03", "installed and used it. If you have questions");
                    insertData(db, "tizenTest04", "This release includes many new features");
                    insertData(db, "tizenTest05", "Highlights of this release include");
    
                    dataView(db);
    
                } else {
                    alert("Web SQL Database is not supported in this browser");
                }
            }
    
            //reads and displays values from the 'places' table
            function dataView(db) {
                var html = document.getElementById("tbody01");
                var ddlHtml = document.getElementById("ddlTitle");
                html.innerHTML = "";
                ddlHtml.innerHTML = "";
    
                db.transaction(function (t) {
                    t.executeSql("SELECT * FROM tizenTable", [],
                    function (tran, r) {
                        ddlHtml.innerHTML = "<option value='all'>all</option>";
                        for (var i = 0; i < r.rows.length; i++) {
                            var id = r.rows.item(i).id;
                            var title = r.rows.item(i).title;
                            var content = r.rows.item(i).content;
                            var insertday = r.rows.item(i).insertDay;
    
                            //data list rendering
                            if (html) {
                                html.innerHTML += "<tr><td>" + id + "</td><td>" + title + "</td><td>" + content + "</td><td>" + insertday + "</td></tr>";
                            }
    
                            //select box rendering
                            if (ddlHtml) {
                                ddlHtml.innerHTML += "<option value=" + id + ">" + title + "</option>";
                            }
                        }
                    },
                    function (t, e) { alert("Error:" + e.message); }
                 );
                });
            }
    
            // create table
            function createTable(db) {
                db.transaction(function (t) {
                    t.executeSql("CREATE TABLE tizenTable (id INTEGER PRIMARY KEY, title TEXT, content TEXT, insertDay DATETIME)", []);
                });
            }
    
            //inserting data in table
            function insertData(db, title, context) {
                db.transaction(function (e) {
                    var day = new Date();
                    e.executeSql("INSERT INTO tizenTable(title, content, insertDay) VALUES (?, ?, ?)", [title, context, day], onSuccess, onError);
                });
            }
    
            function onSuccess(e) { }
            function onError(e) { }
    
            // drop table
            function dropTable(db) {
                db.transaction(function (e) {
                    e.executeSql("DROP TABLE tizenTable");
                });
            }
    
            //Select the data conditions
            function dataChange(value) {
                if (value != "all") {
                    var html = document.getElementById("tbody01");
                    html.innerHTML = "";
                    db.transaction(function (t) {
                        t.executeSql("SELECT * FROM tizenTable WHERE id=?", [value],
                    function (tran, r) {
                        for (var i = 0; i < r.rows.length; i++) {
                            var id = r.rows.item(i).id;
                            var title = r.rows.item(i).title;
                            var content = r.rows.item(i).content;
                            var insertday = r.rows.item(i).insertDay;
    
                            if (html) {
                                html.innerHTML += "<tr><td>" + id + "</td><td>" + title + "</td><td>" + content + "</td><td>" + insertday + "</td></tr>";
                            }
                        }
                    },
                    function (t, e) { alert("Error:" + e.message); }
                 );
                    });
                } else {
                    dataView(db);
                }
            }
    
            window.onload = function () {
                selectDB();
            };
    

    Index.html

    <thead>
         <tr>
            <th>id</th>
            <th>title</th>
            <th>context</th>
            <th>date</th>
         </tr>
    </thead>
    <tbody id="tbody01">
    </tbody>