Функция удаления IndexedDB из Chrome Extension не работает - PullRequest
0 голосов
/ 20 сентября 2018

Все это вызывается внутри расширения Chrome с использованием indexedDB.

Я не буду писать свой HTML, поскольку это простая разметка, однако, если это необходимо, скажите мне.

Код, о котором идет речь, находится в операторе IF внутри функции request.onsuccess:

if (getQueryVariable("deleteid") != "") {
    removeFilter(id); // This
};

В операторе if я могу получить свой идентификатор непосредственно из URL-адреса, используя "getQueryVariable (" deleteid ")"и жесткое кодирование идентификатора" 2 "в моей функции removeFilter (2), однако, работает нормально, используя" var id = getQueryVariable ("deleteid"). toString (); в removeFilter (id) нет "дальнейших примеров в кодекомментарии.

//
//The code below works, except the functions in question inside the IF statements
//
document.addEventListener("DOMContentLoaded", function (event) {
    if (!window.indexedDB) {
        window.alert("Something went wrong");
    };
    var request = indexedDB.open('filterDB', 3);
    request.onupgradeneeded = function (e) {
        var db = e.target.result;

        if (!db.objectStoreNames.contains('filters')) {
            var os = db.createObjectStore('filters', { keyPath: "id", autoIncrement: true });
            //create index for name
            os.createIndex('name', 'name', { unique: false });
        };
    };
    //success
    request.onsuccess = function (e) {
        console.log('Success: Opened DB');
        db = e.target.result;
        //Show Content
        showFilters();
        // The function removeFilter() is only supposed to be called once and the commented functions are just examples
        if (getQueryVariable("deleteid") != "") {   // the URL reads popup.html?deleteid=2
            var id = getQueryVariable("deleteid").toString(); // id = 2
            removeFilter(id); // calls the onsuccess function, but doesnt delete anything 
            //removeFilter(getQueryVariable("deleteid").toString()); // same deal
            //removeFilter(2); // Deletes Item with id = 2, so the function works with a hardcoded ID
            //alert(getQueryVariable("deleteid").toString()); // alerts id = 2
            //alert(id); // alerts id = 2
            window.location.href = "popup.html";
        };
        
    };
    //Error
    request.onerror = function (e) {
        console.log('Error, Could not open DB');
    };
    document.getElementById("FilterAdd").onclick = function () {
        addFilter();
        showFilters()
        document.getElementById("filtername").value = "";
        document.getElementById("tags").value = "";
    };
});
// My delete function
function removeFilter(id) {
    var transaction = db.transaction(['filters'], 'readwrite');
    var store = transaction.objectStore("filters");
    var request = store.delete(id);
    //success and error callbacks
    request.onsuccess = function (e) {
        db = e.target.result;
        console.log("Filter " + id + " deleted");
    };
    request.onerror = function (e) {
        alert("Sorry, the filter wasnt removed");
        console.log('Error ', e.target.error.name);
    };
};
// Getting the id from URL function
function getQueryVariable(variable) {
    var query = window.location.search.substring(1);
    var vars = query.split("&");
    for (var i = 0; i < vars.length; i++) {
        var pair = vars[i].split("=");
        if (pair[0] == variable) { return pair[1]; }
    }
    return (false);
}
Если я могу жестко закодировать "2" в функцию removeFilter (2), и это работает, не должна ли переменная var id = getQueryVariable ("deleteid"). ToString ();работать, так как он возвращает «2» внутри «alert (id)»?

Я довольно новичок в Javascript и уже некоторое время борюсь с этой проблемой

Извините, если этот вопрос уже был поднят, я попытался посмотреть, но ничего не нашел.

1 Ответ

0 голосов
/ 20 сентября 2018

После долгих попыток решить мою проблему, я в конце концов понял, что мне просто нужно преобразовать мой getQueryVariable ("deleteid"). ToString () в целое число, так как моей функции removeFilter () требуется int,так просто писать

removeFilter (parseInt (id));

сработало .. ууу

Не знаю, помогает ли это кому-нибудь ... но оно есть ..

...