【问题标题】:How to sync chrome bookmarks with server in extension using API如何使用 API 将 chrome 书签与扩展中的服务器同步
【发布时间】:2015-12-23 14:40:57
【问题描述】:

我正在创建一个 Chrome 扩展程序,允许您查看、更新、创建和删除您的 Chrome 书签。我还希望能够通过我们的服务器加载和保存用户的书签,而不是通过谷歌帐户同步。我遇到的问题是我不确定我们将如何跨设备同步这些书签。由于Chrome bookmarks API 没有任何方法来加载/同步树,我想我会将每个书签/文件夹保存在服务器上的数组中,例如

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

当用户在新设备/浏览器上登录他们的帐户时,我从服务器获取书签/文件夹数组并循环访问它们。在循环中,我将使用带有 ID 的 Chrome.bookmarks.get 来检查该书签是否已存在,如果不存在,则使用 create 函数创建该书签。问题是,我无法在文档中看到指定新创建的书签/文件夹的 ID。如果在新设备/浏览器上创建的书签/文件夹的 ID 与原始设备/浏览器不同怎么办?然后使用 get 函数(需要您指定要查找的 ID)不允许我正确比较书签。这个问题还有其他解决方案吗?

【问题讨论】:

  • 一个有点疯狂的想法:根据需要创建尽可能多的虚拟书签,直到创建的书签的 id 符合您的需要,然后删除虚拟书签。要优化此过程,请将您的树转换为平面数组并按 ID 对其进行排序。
  • 感谢大家的建议!我最终使用 url 和标题进行搜索,然后检查它们是否具有相同的父 ID。

标签: javascript jquery google-chrome google-chrome-extension bookmarks


【解决方案1】:

我实际上最终使用了 Chrome 书签搜索功能,通过 url 和标题搜索书签,然后匹配以查看父 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);
  }

}

【讨论】:

    猜你喜欢
    • 2015-08-06
    • 2012-01-17
    • 2016-04-30
    • 1970-01-01
    • 2022-10-19
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    相关资源
    最近更新 更多