2013-10-11 50 views
0

在我的擴展中,我有一個關於chrome.bookmarks.onRemoved事件的偵聽器。如何識別已刪除的書籤

當我的偵聽器被調用時,它會傳遞父代和索引,而不是已刪除書籤的圖像。我無法弄清楚的是,如何找出哪些書籤已被刪除?

回答

0

您不能使用chrome.bookmarks.get API來獲取已刪除的書籤,因爲它已被刪除。我能想到的唯一解決方案是保留完整書籤樹的副本,並搜索已刪除書籤的ID。一個天真的實施將是:

var bookmarks = []; 

function updateBookmarks() 
{ 
    chrome.bookmarks.getTree(function(results) { bookmarks = results; }); 
} 
updateBookmarks(); 

chrome.bookmarks.onRemoved.addListener(function(id, removeInfo) 
{ 
    console.log("Removed bookmark"); 
    console.log(findBookmarkWithId(bookmarks, id)); 

    updateBookmarks(); 
}); 

function findBookmarkWithId(bookmarks, id) 
{ 
    if (bookmarks === null || typeof bookmarks === "undefined") 
     return null; 

    for (var i = 0; i < bookmarks.length; i++) 
    { 
     if (bookmarks[i].id === id) 
      return bookmarks[i]; 

     var child = findBookmarkWithId(bookmarks[i].children, id) 
     if (child !== null) 
      return child; 
    } 

    return null; 
} 

// keep local copy up to date 
chrome.bookmarks.onCreated.addListener(function(id, bookmark) 
{ 
    updateBookmarks(); 
}); 

chrome.bookmarks.onChanged.addListener(function(id, bookmark) 
{ 
    updateBookmarks(); 
}); 

// TO DO: deal with chrome.bookmarks.onImportBegan/onImportEnd 
+0

非常感謝。我開始感覺到chrome.bookmarks。* API是爲了阻止開發人員編寫書籤擴展而創建的。我現在已經花了1天的時間編寫我的代碼,並且花了4天的時間與API戰鬥。 – pinoyyid

1

快樂的消息。

chrome.bookmarks.onRemoved回調有'節點'參數。它包含已刪除書籤節點的詳細信息。

您可以在Chrome canary版本48.0.2529.0中使用它。