在半小时内从无到有开发并调试一款Chrome扩展(Chrome插件/谷歌浏览器插件)

简介: 就在不久之前,我们目前这个毕业班的班长那日同学和我说,他正在公司开发Chrome扩展,看起来很高大上的技术,实际开发却非常简单,这引起了我非常浓厚的兴趣,正所谓技不压身,检验自身技术的手段之一就是拥抱新事物,这一次我们尝试在半小时内开发一款Chrome扩展,因为之前我们做了一个[微信小程序的在线面试题题库](https://v3u.cn/a_id_116)的项目,所以正好利用这个题库将面试题平移到Chrome扩展上面。

就在不久之前,我们目前这个毕业班的班长那日同学和我说,他正在公司开发Chrome扩展,看起来很高大上的技术,实际开发却非常简单,这引起了我非常浓厚的兴趣,正所谓技不压身,检验自身技术的手段之一就是拥抱新事物,这一次我们尝试在半小时内开发一款Chrome扩展,因为之前我们做了一个微信小程序的在线面试题题库的项目,所以正好利用这个题库将面试题平移到Chrome扩展上面。

Chrome插件其实和一个普通web应用一样都是由html+css+js经过zip打包组成的,插件可以使用Chrome提供的浏览器API,增强浏扩展览器的功能。Chrome插件通常是.crx后缀的文件,通过谷歌网上应用商店下载或者在开发者模式中可以直接拖入到浏览器进行安装

首先建立一个项目文件夹,mkdir chrome\_demo

在项目根目录下建立一个manifest.json文件,它是chrome扩展的核心配置,用来定义和配置我们的扩展

{
    "manifest_version": 2,
    "name": "v3u.cn-python_interview",
    "description": "Dotions - python面试题",
    "version": "1.0",
    "browser_action": {
        "default_icon": "icon.png",
        "default_popup": "popup.html",
        "default_title": "点这里查看面试题"
    },
    "permissions": [
        "tabs",
        "webRequest", 
        "webRequestBlocking",
        "storage",
        "webNavigation",    
        "tabs",            
        "contextMenus",        
        "http://*/",        
        "https://*/",
        "notifications"    
    ]
}

其中name代表应用程序名,version代表版本号,description代表功能描述。这些在安装扩展后就能看到,其他还有一些权限的设置,以及扩展图标(icon),可以自己设计一个比较独特和醒目的图标放在项目根目录,这里推荐一款在线小图标生成工具: https://iconsflow.com

随后我们来定义扩展的页面部分,popup.html

<!DOCTYPE html>
<html lang="zh-CN" style="min-width:300px;background-color: #292a2d;color:#a9a9b3;padding:20px;">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>python面试题</title>
        
        <script type="text/javascript" src="js/jquery.min.js"></script>
        <script type="text/javascript" src="js/popup.js"></script>
    </head>
    <body>
       <div id="title"> 
        123123
       123123
       123
    </div>
       <br />
       <button id="my">显示答案</button>
       <br /><br />
       <div id="answer" style="display: none;"></div>


       
    </body>
</html>

页面部分和传统的html页面并无二致,这里配色我们使用最近很流行的“暗黑模式”配色,看起来是这个样子的

这里我们的项目依赖于jquery,所以在根目录建立js文件夹,放入jquery文件以及我们自定义的js文件popup.js

$(function () {
    
    
    

        
       console.log('你好你好');

        
        $.ajax({url:"https://vx.weiinng.cn/chrome",data:{'word':'redis123'},contentType: "application/json", 
        dataType: "json",success:function(result){
            console.log(result);
            $("#title").html(result.result[0]['title']);
            $("#answer").html(result.result[0]['desc']);
        }});

    $("#my").click(function () {

        $("#answer").show();
    
    });


});

我们看到,这个逻辑很简单,就是点击按钮进入扩展的时候,利用jquery往后台发送一个异步请求,用来获取一道随机面试题,接口返回数据后,前端再通过回调方法将面试题渲染到扩展的页面中,目前为止,我们的项目结构是这样的

随后我们将扩展导入到chrome浏览器中,在浏览器地址栏输入:chrome://extensions/,然后点击加载已解压的扩展程序

代码里我用console.log输出了一些信息,那么怎么调试扩展呢?只要右键点击你的扩展图标点击审查弹出就可以进行调试。

无论是修改html还是修改js文件都是实时生效的,无须重启浏览器,或者重新加载扩展,这一点无疑非常方便,那么后台怎么接收前端扩展发过来的参数呢?这里我们以tornado为例子

#查看数据
class FindComHandler(BaseHandler):
    def get(self):
       
        word = self.get_argument('word',None)


        print(word)
        
        self.write(jsonb.dumps({'result':word},ensure_ascii=False))

非常简单,可以看出来和普通的前后端分离的接口一样,没什么特别的

这里我们需要在题库中随机取一道面试题,所以需要用到mongodb的分组随机语法

#随机取一条数据
class ChromeHandler(BaseHandler):
    def get(self):
        db = mongo_client.interview
        table = db.interview

        mylist = []


        pipeline = [{ '$sample': { 'size': 2 } },{'$match':{"com":""}}]
        res = table.aggregate(pipeline)

        for result in res:
            print(result)
            mylist.append(result)
            break
        
        self.write(jsonb.dumps({'result':mylist},ensure_ascii=False))

至此一个简单的随机面试题扩展就开发好了,看看表,确实不到半小时就可以搞定,当我们用chrome上网的时候,只需要点击图标就可以随时查看目前市场上的常见面试题,简直太方便了

开发完毕之后,我们还可以在扩展页面对你的项目进行打包,打包好的扩展为一个crx文件,这样就可以进行拖拽安装了

最后,感谢那日同学的分享才有了这篇文章,老规矩,分享出项目地址供广大开发者交流指正

https://github.com/zcxey2911/chrome\_v3u

相关文章
|
8月前
|
机器学习/深度学习 人工智能 文字识别
浏览器AI模型插件下载,支持chatgpt、claude、grok、gemini、DeepSeek等顶尖AI模型!
极客侧边栏是一款浏览器插件,集成ChatGPT、Claude、Grok、Gemini等全球顶尖AI模型,支持网页提问、文档分析、图片生成、智能截图、内容总结等功能。无需切换页面,办公写作效率倍增。内置书签云同步与智能整理功能,管理更高效。跨平台使用,安全便捷,是AI时代必备工具!
652 8
|
数据可视化 Java Windows
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
本文介绍了如何在Windows环境下安装Elasticsearch(ES)、Elasticsearch Head可视化插件和Kibana,以及如何配置ES的跨域问题,确保Kibana能够连接到ES集群,并提供了安装过程中可能遇到的问题及其解决方案。
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
|
10月前
|
Web App开发 人工智能 JavaScript
一键三连不求人!用 CodeBuddy 写个浏览器插件自动点赞、评论、收藏
本文介绍了一款通过 CodeBuddy AI 工具开发的浏览器插件,可自动完成“点赞、评论、收藏”三连操作。作者从需求出发,分四步实现:搭建基础框架、指定目标网页、解析内容并模拟点击事件,最后加载验证插件。借助 CodeBuddy 自动生成代码,整个过程高效便捷,大幅提升用户体验。此工具不仅节省手动操作时间,还为自动化任务提供了新思路,适合热爱技术与效率提升的网页冲浪者尝试。
|
人工智能 开发框架 自然语言处理
Eko:一句话就能快速构建复杂工作流的 AI 代理开发框架!快速实现自动操作电脑和浏览器完成任务
Eko 是 Fellou AI 推出的开源 AI 代理开发框架,支持自然语言驱动,帮助开发者快速构建从简单指令到复杂工作流的智能代理。
1718 12
Eko:一句话就能快速构建复杂工作流的 AI 代理开发框架!快速实现自动操作电脑和浏览器完成任务
|
人工智能 程序员 测试技术
AI编程:Coze + Cursor实现一个思维导图的浏览器插件
本文是小卷关于AI编程工具学习的第3篇文章,通过开发一个思维导图生成工具,详细介绍了AI编程的完整流程。从需求分析、插件选择(如Coze的TreeMind),到创建测试工作流、发布API,再到整合API和开发浏览器插件,最终实现了用户选中文字后生成思维导图的功能。文章展示了如何利用现有工具高效开发,并总结了AI编程的优势与未来趋势。
1419 14
|
Web App开发 搜索推荐 开发者
浏览器插件上架指南:如何把你的产品搬上浏览器插件市场
在实践了 Chrone、Firefox、Edge、Opera 等 几个主要的插件平台的上架发布工作后,我觉得很有必要把这个过程和思考记录下来,分享给大家,希望能提供一些参考和避坑的经验。我想通过这篇文章,和大家聊聊「为什么我要做这件事」,以及「这个系列文章会包含哪些内容」。我想用一个系列的文章,记录我是如何把 EmojiClick 搬到浏览器插件市场的,也给大家提供一些借鉴经验。
383 19
|
Web App开发 前端开发 JavaScript
为什么浏览器兼容性在开发网站时很重要?
浏览器兼容性在网站开发中确实非常重要。
|
安全 Oracle Java
edge浏览器加载java插件
edge浏览器加载java插件
1156 1
|
Web App开发 存储 前端开发
《Chrome谷歌插件Top10》开发最好用的谷歌插件
本文介绍了多个实用的浏览器插件及其安装方法。包括CSDN浏览器助手,提供高效开发工具;FeHelper,前端必备工具,支持格式化、压缩等功能;uBlock Origin,有效屏蔽广告和弹窗;PageLiner,网页标尺工具,便于前端设计;Fatkun,批量下载图片;Smallpdf,文件转换工具;Octotree,GitHub代码树插件;Awesome Screenshot,截图与录屏工具;ColorZilla,颜色拾取器;Dark Reader,暗黑模式阅读插件。安装方式有通过Chrome商店搜索或下载crx插件本地安装。
586 11
|
Web App开发 JavaScript 前端开发
浏览器内小脚本开发
【8月更文挑战第31天】
501 1