4

我正在制作一个小型 Chrome 扩展程序。我想使用chrome.storage,但无法从存储中删除多个项目(数组)。单项删除工作。

function clearNotes(symbol)
{
    var toRemove = "{";

    chrome.storage.sync.get(function(Items) {
        $.each(Items, function(index, value) {
            toRemove += "'" + index + "',";         
        });
        if (toRemove.charAt(toRemove.length - 1) == ",") {
            toRemove = toRemove.slice(0,- 1);
        }
        toRemove = "}";
        alert(toRemove);
    });

    chrome.storage.sync.remove(toRemove, function(Items) {
        alert("removed");
        chrome.storage.sync.get( function(Items) {
            $.each(Items, function(index, value) {
                alert(index);           
            });
        });
    });
}; 

似乎没有任何问题,但最后一个提醒存储中内容的循环仍然显示我要删除的所有值。

4

1 回答 1

11

当您将字符串传递给 时sync.remove,Chrome 将尝试删除其键与输入字符串匹配的单个项目。如果您需要删除多个项目,请使用键值数组。

此外,您应该将remove呼叫移至get回调内部。

function clearNotes(symbol)
{
// CHANGE: array, not a string
var toRemove = [];

chrome.storage.sync.get( function(Items) {
    $.each(Items, function(index, value)
    {
        // CHANGE: add key to array
        toRemove.push(index);         
    });

    alert(toRemove);

    // CHANGE: now inside callback
    chrome.storage.sync.remove(toRemove, function(Items) {
        alert("removed");

        chrome.storage.sync.get( function(Items) {
            $.each(Items, function(index, value)
            {
                alert(index);           
            });
        });
    }); 
});

}; 
于 2013-07-29T18:12:39.767 回答