浏览器用户文件夹详解 - Bookmarks(一)

1. 引言

在现代浏览器中,用户数据管理是一个关键部分,尤其是对于像Chromium这样的浏览器引擎。Chromium不仅在Google Chrome中广泛使用,还被许多其他浏览器所采用。用户文件夹中的数据文件存储了大量的用户信息,其中书签(Bookmarks)尤为重要。了解这些文件的结构和功能,对于开发者和高级用户来说都至关重要。本篇文章将详细介绍Chromium用户文件夹中的Bookmarks文件,帮助读者更好地理解和管理这些数据。

2. Chromium用户文件夹概述

2.1用户文件夹的路径和位置

Chromium用户文件夹的位置因操作系统的不同而有所差异。以下是各操作系统中Chromium用户文件夹的默认路径:

  • Windows
    用户文件夹位于 C:\Users\<用户名>\AppData\Local\Google\Chrome\User Data\Default 目录中,其中 <用户名> 是当前登录用户的名称。
  • macOS
    用户文件夹位于 /Users/<用户名>/Library/Application Support/Chromium 目录中。
  • Linux
    用户文件夹位于 /home/<用户名>/.config/chromium 目录中。

在这些路径中,用户文件夹通常被称为 User Data,其中包含了各种配置文件和数据文件。

2.2主要文件和目录介绍

在Chromium用户文件夹中,本文主要讲解这个文件:

  • Bookmarks: 这是一个JSON格式的文件,存储了用户的所有书签信息,包括书签栏、其他书签以及移动设备上的书签。每个书签条目包含标题、URL、文件夹路径等信息。

3. Bookmarks文件解析

3.1文件位置与基本结构

还记得我们刚才提到的用户文件夹路径吗?在那个文件夹里,你会看到一个名为Bookmarks的文件。

当你打开这个文件时,你会发现它是以JSON格式存储的。JSON是一种常用的数据格式,以键值对的形式组织数据。如果你对编程有所了解,一定对JSON不陌生。但即使你是个编程小白,也不用担心,我们会一步步来解释。

3.2 JSON格式的书签数据

在Bookmarks文件中,你会看到一个类似树状结构的数据。每个书签就像树上的一片叶子,而文件夹则是树枝。这种结构让我们可以方便地管理和分类书签。

每个书签条目都包含了一些基本信息,例如:

• id:书签的唯一标识符

• name:书签的名称

• type:书签的类型(如url或folder)

• url:书签指向的网址

• children:如果这是一个文件夹,这里会列出文件夹内的书签

{
   "checksum": "e631e2e9d800a890f92fa5656e7b35f3",
   "roots": {
      "bookmark_bar": {
         "children": [ {
            "children": [ {
               "date_added": "13365506303032115",
               "date_last_used": "0",
               "guid": "0d459d9d-6b16-4fce-99c7-5fbedb659b5e",
               "id": "13",
               "meta_info": {
                  "power_bookmark_meta": ""
               },
               "name": "百度一下,你就知道",
               "type": "url",
               "url": "https://www.baidu.com/"
            } ],
            "date_added": "13365506284823827",
            "date_last_used": "0",
            "date_modified": "13365506303032115",
            "guid": "d7ebdc37-0052-42b2-b364-bbe0a1f4eb6f",
            "id": "11",
            "name": "folder2",
            "type": "folder"
         } ],
         "date_added": "13365506146663468",
         "date_last_used": "0",
         "date_modified": "13365506284824664",
         "guid": "0bc5d13f-2cba-5d74-951f-3f233fe6c908",
         "id": "1",
         "name": "书签栏",
         "type": "folder"
      },
      "other": {
         "children": [ {
            "children": [ {
               "date_added": "13365506266661249",
               "date_last_used": "13365506310439048",
               "guid": "83091dc4-303e-4e92-9ee5-6452ce0fa332",
               "id": "10",
               "meta_info": {
                  "power_bookmark_meta": ""
               },
               "name": "百度一下,你就知道",
               "type": "url",
               "url": "https://www.baidu.com/"
            } ],
            "date_added": "13365506215928479",
            "date_last_used": "0",
            "date_modified": "13365506270997336",
            "guid": "f47a1ead-c16d-4eb4-894d-2f35427a949f",
            "id": "8",
            "name": "New Folder",
            "type": "folder"
         }, {
            "date_added": "13365506187978248",
            "date_last_used": "0",
            "guid": "46824156-1f69-45d1-94f6-6f2287da88e7",
            "id": "6",
            "meta_info": {
               "power_bookmark_meta": ""
            },
            "name": "Browserleaks - Check your browser for privacy leaks",
            "type": "url",
            "url": "https://browserleaks.com/"
         }, {
            "date_added": "13365506201238984",
            "date_last_used": "0",
            "guid": "0d664491-584b-4dbe-a5ae-75c98fa15f3c",
            "id": "7",
            "meta_info": {
               "power_bookmark_meta": ""
            },
            "name": "CreepJS",
            "type": "url",
            "url": "https://abrahamjuliot.github.io/creepjs/"
         } ],
         "date_added": "13365506146663495",
         "date_last_used": "0",
         "date_modified": "13365506266661249",
         "guid": "82b081ec-3dd3-529c-8475-ab6c344590dd",
         "id": "2",
         "name": "其他书签",
         "type": "folder"
      },
      "synced": {
         "children": [  ],
         "date_added": "13365506146663510",
         "date_last_used": "0",
         "date_modified": "0",
         "guid": "4cf2e351-0e85-532b-bb37-df045d8f8d0f",
         "id": "3",
         "name": "移动设备书签",
         "type": "folder"
      }
   },
   "version": 1
}

使用文本编辑器打开这个文件,我们可以看到组织好的JSON格式的书签

3.3文件的读写操作

当你在Chromium浏览器中添加、删除或修改书签时,这些变化都会实时反映在Bookmarks文件中。也就是说,Chromium会自动读取和写入这个文件,以保持数据的同步。

例如,我先清空我的书签

然后我查看对应的Bookmarks文件变化

这时我添加一个百度的书签

可以发现对应的记录已经添加到文件当中了

如果你想手动编辑Bookmarks文件,建议你先关闭Chromium浏览器,以免数据不一致导致问题。编辑完成后,重新启动浏览器,你的更改就会生效了。

3.4书签的组织和分类

Bookmarks文件中的数据结构,很好地体现了书签的组织方式。通过文件夹,我们可以将相关的书签归类到一起,使它们更易于管理和查找。

3.5实践:如何和备份书签

自己手动备份

  1. 打开自己的书签管理页

  1. 点击右上角的导出书签

  1. 选择文件存放位置
  2. 保存完成

使用浏览器提供的账号备份

您也可以选择使用将书签同步到云端的功能,将书签与账号关联。这样就可以在登录账号时将书签同步。

4. 结语

通过本文的介绍,我们详细探讨了Chromium用户文件夹中的Bookmarks的结构和功能。我们了解了如何找到这些文件的位置,理解它们的存储格式,以及如何手动编辑和管理这些数据文件。书签(Bookmarks)文件以JSON格式存储,便于用户对书签数据进行管理和分类;

掌握这些知识不仅能帮助开发者更好地定制和优化Chromium浏览器,还能使高级用户在需要时对自己的浏览数据进行备份和恢复操作,确保数据安全和浏览体验的一致性。

在下篇文章中,我们将深入探讨Chromium中的另一个关键数据文件:Favicons。我们将介绍Favicons的存储机制、使用的SQLite3数据库。希望通过这些深入的探讨,您能全面掌握Chromium用户数据管理的方方面面。

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的用Binding方法写的WebView微型浏览器的Kotlin代码: 1. 在build.gradle文件中添加以下依赖项: ```kotlin implementation 'androidx.appcompat:appcompat:1.3.0' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation 'androidx.webkit:webkit:1.4.0' ``` 2. 创建一个Activity,并在布局文件中添加一个WebView: ```kotlin class MainActivity : AppCompatActivity() { private lateinit var webView: WebView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) webView = findViewById(R.id.webView) webView.settings.javaScriptEnabled = true //启用JavaScript } } ``` 3. 在布局文件中添加一个WebView组件: ```xml <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="match_parent"/> ``` 4. 在Activity中添加一个菜单项,用于输入网址并加载: ```kotlin override fun onCreateOptionsMenu(menu: Menu?): Boolean { menuInflater.inflate(R.menu.main_menu, menu) return true } override fun onOptionsItemSelected(item: MenuItem): Boolean { return when (item.itemId) { R.id.action_go -> { val url = findViewById<EditText>(R.id.urlEditText).text.toString() webView.loadUrl(url) true } else -> super.onOptionsItemSelected(item) } } ``` 5. 在菜单文件中添加一个EditText和一个MenuItem: ```xml <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/action_go" android:title="Go" android:icon="@drawable/ic_baseline_arrow_forward_24" android:showAsAction="always"/> <item android:id="@+id/action_refresh" android:title="Refresh" android:icon="@drawable/ic_baseline_refresh_24" android:showAsAction="always"/> <item android:id="@+id/action_back" android:title="Back" android:icon="@drawable/ic_baseline_arrow_back_24" android:showAsAction="always"/> <item android:id="@+id/action_forward" android:title="Forward" android:icon="@drawable/ic_baseline_arrow_forward_24" android:showAsAction="always"/> <item android:id="@+id/action_home" android:title="Home" android:icon="@drawable/ic_baseline_home_24" android:showAsAction="always"/> <item android:id="@+id/action_bookmarks" android:title="Bookmarks" android:icon="@drawable/ic_baseline_bookmark_24" android:showAsAction="always"/> <item android:id="@+id/action_settings" android:title="Settings" android:icon="@drawable/ic_baseline_settings_24" android:showAsAction="always"/> <item android:id="@+id/action_exit" android:title="Exit" android:icon="@drawable/ic_baseline_exit_to_app_24" android:showAsAction="always"/> <item android:id="@+id/urlEditText" android:title="Url" android:inputType="textUri" android:hint="Enter URL" android:icon="@drawable/ic_baseline_link_24" android:showAsAction="always" android:actionViewClass="android.widget.EditText"/> </menu> ``` 现在你可以运行这个应用程序,输入一个URL,然后点击菜单中的Go按钮来加载网页了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值