2

Я создаю расширение Chrome, которое позволяет просматривать, обновлять, создавать и удалять закладки Chrome. Я также хотел бы иметь возможность загружать и сохранять закладки пользователя через наш сервер вместо синхронизации через учетную запись google. Проблема, с которой я сталкиваюсь, заключается в том, что я не уверен, как мы будем синхронизировать эти закладки между устройствами. Поскольку Chrome bookmarks API не имеет какой-либо метод (ы) для загрузки/синхронизации дерева, я полагаю, я спасу каждую закладку/папку в массиве на сервере, таких какКак синхронизировать хромированные закладки с сервером в расширении с помощью API

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

Когда пользователь входит в свой аккаунт на новое устройство/браузер, я получаю массив закладок/папок с сервера и просматриваю их. В цикле я использовал бы Chrome.bookmarks.get с идентификатором, чтобы проверить, существует ли эта закладка, а если нет, то используйте функцию create для создания этой закладки. Проблема в том, что я не вижу в документации, чтобы указать идентификатор вновь созданной закладки/папки. Что делать, если в закладке/папке, созданной на новом устройстве/браузере, есть другой идентификатор, а затем оригинальное устройство/браузер? Затем использование функции get (для которой требуется указать идентификатор, который вы ищете) не позволит мне правильно сравнивать закладки. Есть ли другое решение для этой проблемы?

+0

Несколько сумасшедшая идея: создать столько фиктивных закладок, сколько необходимо, пока не будет создан идентификатор созданной закладки, а затем удалите макеты. Чтобы оптимизировать этот процесс, преобразуйте дерево в плоский массив и отсортируйте его по идентификаторам. – wOxxOm

+0

Я бы сказал, что вместо использования 'get' использовать' getTree' и сопоставления с url/title вместо id, так как вы не можете управлять этими идентификаторами. – BeardFist

+0

Спасибо за предложения, ребята! Я закончил поиск с URL и заголовком, а затем проверил, что у них одинаковый идентификатор родителя. – CaitlinHavener

ответ

0

На самом деле я воспользовался функцией поиска закладок Chrome для поиска закладки по URL-адресу и заголовку, а затем сопоставил, чтобы узнать, соответствует ли родительский идентификатор. Вид отвратительного способа сделать это, но он работает!

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); 
    } 

}