Chrome扩展插件开发—书签管理

630 阅读1分钟

在设计OneTree(个人云书签)的时候,考虑只是单纯的做一个书签存放的工具,功能上肯定没有那么完善。所以在起初设计的时候,还考虑到Onetree与浏览器书签的交互操作。

第一阶段

书签的导入和导出,其实这是一个双向操作,主要实现Onetree的书签可以直接导入谷歌浏览器,也可以将谷歌浏览器的书签直接导入Onetree。这中间的导入与导出操作都是以html文件为介质操作的。

第二阶段

开发一个谷歌浏览器拓展插件,可以轻松将浏览器书签同步到Ontree。

拓展插件开发

必要具备的前提技能:html、JavaScript等前端技能。

Chrome为开发者提供了添加、分类(书签文件夹)和排序等方法来操作书签,同时也提供了读取书签的方法。

要在扩展中操作书签,需要在Manifest中声明bookmarks权限:

"permissions": [
    "bookmarks"
]

首先了解一下书签的数据结构:有8个属性,分别是id、parentId、index、url、title、dateAdded、dateGroupModified和children 。

直接上核心代码

下面是基于vue开发插件

    data: {
        marks: [],
        defaultProps: {
            children: 'children',
            label: 'label'
        },
        token:''
    },
    created: function () {
        this.token = localStorage.getItem("token")
        chrome.bookmarks.getTree(markNodes => {
            this.marks = this.dumpTreeNodes(markNodes)[0].children;
        });
    },
    methods: {
        dumpTreeNodes: function (markNodes, folder) {
            const tmpMarks = [];
            for (const node of markNodes) {
                tmpMarks.push(this.dumpNode(node, folder));
            }
            return tmpMarks;
        },
        dumpNode: function (markNode, folder) {
            const node = {};
            node.label = markNode.title || markNode.url;
            node.id = markNode.id++;
            node.url = markNode.url;
            node.folder = folder
            const children = markNode.children;
            if (children && children.length > 0) {
                node.children = this.dumpTreeNodes(children, node.label);
            }
            return node;
        }
    }

书签列表页面

<el-tree class="filter-tree" node-key="id" :data="marks" :props="defaultProps" default-expand-all :filter-node-method="filterNode"
     ref="tree">
     <span class="custom-tree-node" slot-scope="{ node, data }">
         <span>
             <a :href="data.url" target="_blank">{{ data.label }}</a>
         </span>
     </span>
</el-tree>

这样,一个简单的书签列表的拓展插件做出来了,可以直接导入谷歌浏览器使用。

在更多工具 -> 拓展程序 ->加载已解压的拓展程序。

参考文档:www.wenjiangs.com/doc/txxxzgu…