在谷歌浏览器中创建书签校验和的逻辑

KKS*_*KSB 5 google-chrome google-chrome-extension

我如何在chrome bookmarkfile中添加新的书签条目?我的要求是,我需要通过我的应用程序添加书签条目.请指定创建校验和(MD5)背后的逻辑.

kri*_*spy 6

无论做到这一点的安全性/黑客性,这里是如何:

  1. 确保Chrome已关闭.
  2. 删除(或重命名) Bookmarks.bak
  3. 完全从中删除校验和条目 Bookmarks
  4. Bookmarks根据您的心灵内容编辑JSON
  5. 重新打开Chrome

如果没有备份且没有校验和,Chrome将使用新的JSON并生成新的校验和.

如果您希望更加无缝/更积极地执行此操作,您可以查看它们如何在原始源代码中生成校验和并实现相同的算法(请参阅此处,第57行).

当然,请记住,谷歌可以改变可能破坏兼容性的东西.但是,这确实有效,我只是在我写的Java应用程序中做到了.


小智 6

显然,这是黑客行为,仅适用于知道自己在做什么的人,但是,由于 Chrome Mobile 不允许用户导出/导入自己的书签(不完全是用户友好的!),有时别无选择 - 想象一下必须清理手动创建包含数千个条目的书签文件。

无论如何,这是一个有效的 Python 实现:

roots = ['bookmark_bar', 'other', 'synced']

def checksum_bookmarks(bookmarks):
    md5 = hashlib.md5()

    def checksum_node(node):
        md5.update(node['id'].encode())
        md5.update(node['name'].encode('utf-16le'))
        if node['type'] == 'url':
            md5.update(b'url')
            md5.update(node['url'].encode())
        else:
            md5.update(b'folder')
            if 'children' in node:
                for c in node['children']:
                    checksum_node(c)

    for root in roots:
        checksum_node(bookmarks['roots'][root])
    return md5.hexdigest()
Run Code Online (Sandbox Code Playgroud)

只要您只添加书签,就可能没问题,但对于更复杂的事情(例如进行主要清理、编辑和删除书签,尤其是涉及多个设备时),请务必重置“Chrome Sync”,或者它将返回所有已删除的内容,以及每个已更改书签的额外副本:设置 -> 同步 -> 管理同步数据 -> 重置同步


Ale*_*tri 3

我的建议是:不要。这是类似黑客的行为。Chrome 的“API”中不包含书签文件,并且它可以在没有警告的情况下进行更改。我们不知道如果您在 Chrome 运行时更改文件会发生什么。Chrome 每次在写入之前都会读取该文件吗?或者在启动时只读取一次?配置文件和同步书签怎么样?

我建议使用 Chrome 扩展 API 中的书签对象。