2

將Chrome書籤與擴展服務器同步我正在創建一個Chrome擴展程序,允許您查看,更新,創建和刪除Chrome書籤。我還希望能夠通過我們的服務器加載並保存用戶的書籤,而不是通過Google帳戶進行同步。我遇到的問題是我不確定我們如何跨設備同步這些書籤。由於Chrome bookmarks API沒有任何方法(一個或多個)來加載/ SYNC一棵樹,我想我將在服務器上保存每個書籤/文件夾中的一個陣列,例如如何使用API​​

[{id: "", parentId: "", index: "", title: "", url: ""}, ...] 

當用戶登錄到他們的帳戶上一個新的設備/瀏覽器,我從服務器獲取書籤/文件夾數組並通過它們循環。在循環中,我將使用帶有ID的Chrome.bookmarks.get來檢查書籤是否已經存在,如果不存在,則使用create函數創建該書籤。問題是,我無法在文檔中看到指定新創建的書籤/文件夾的ID。如果在新設備/瀏覽器上創建的書籤/文件夾具有與原始設備/瀏覽器不同的ID,該怎麼辦?然後使用get函數(它要求您指定您正在查找的ID)不會讓我正確比較書籤。有沒有解決這個問題的另一種方法?

+0

一個有點瘋狂的想法:根據需要創建儘可能多的虛擬書籤,直到創建的書籤的ID是您需要的,然後刪除虛擬。要優化此過程,請將您的樹轉換爲平面數組並按ID排序。 – wOxxOm

+0

我會說,而不是使用'get'使用'getTree'並且匹配url/title而不是id,因爲你無法控制這些id。 – BeardFist

+0

感謝您的建議傢伙!我最終使用url和title進行搜索,然後檢查他們是否有相同的父ID。 – CaitlinHavener

回答

0

我實際上最終使用Chrome書籤搜索功能通過網址和標題搜索書籤,然後匹配以查看父ID是否匹配。有點棘手的方式來做到這一點,但它的工作原理!

function initBookmarks(){ 
    //hit endpoint to get array of current bookmarks 
    var curBookmarks = [ 
    { 
     id : "7", 
     parentId : "1", 
     index : 12, 
     title : "A programmatically generated bookmark", 
     url : "http://google.com" 
    }, 
    { 
     id : "8", 
     parentId : "1", 
     index : 13, 
     title : "A programmatically generated bookmark 2", 
     url : "http://google.com" 
    } 
    ]; 

    if(curBookmarks.length > 0){ 
    curBookmarks.forEach(function(bookmark,index){ 
     console.log("searching.. ", {url : bookmark.url, title : bookmark.title}); 
     chrome.bookmarks.search({url : bookmark.url, title : bookmark.title}, function(result){ 
     console.log('result for search for is', result, bookmark.title); 
     var flagExists = false; 
     for(var i = 0; i < result.length; i++){ 
      if(result[i].parentId === bookmark.parentId) flagExists = true; 
     } 

     if(!flagExists){ 
      chrome.bookmarks.create({ 
      parentId: bookmark.parentId, 
      index: bookmark.index, 
      title: bookmark.title, 
      url: bookmark.url 
      }, function(){ 
      console.log('IVE CREATED!!!'); 
      if(index === curBookmarks.length-1) 
       chrome.bookmarks.getTree(parseBookmarks); 
      }); 
     } 
     else{ 
      if(index === curBookmarks.length-1) 
      chrome.bookmarks.getTree(parseBookmarks); 
     } 
     }) 
    }) 
    } 
    else{ 
    chrome.bookmarks.getTree(parseBookmarks); 
    } 

}