在半小时内从无到有开发并调试一款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

相关文章
|
2月前
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
47 1
|
4月前
|
数据可视化 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
|
2月前
|
Web App开发 缓存 安全
WIN11 Chrome 双击打不开闪退及Chrome浏览器不能拖拽文件crx
【11月更文挑战第6天】本文介绍了 WIN11 系统中 Chrome 浏览器双击打不开闪退及不能拖拽文件 crx 的原因和解决方法。包括浏览器版本过旧、扩展程序冲突、硬件加速问题、缓存过多、安全软件冲突、系统文件损坏、用户配置文件损坏等问题的解决方案,以及 crx 文件的屏蔽、权限问题和文件格式问题的处理方法。
147 2
|
2月前
|
Web App开发 Linux iOS开发
Chrome浏览器如何导出所有书签并导入书签
【11月更文挑战第4天】本文介绍了如何在 Chrome 浏览器中导出和导入书签。导出时,打开书签管理器,点击“整理”按钮选择“导出书签”,保存为 HTML 文件。导入时,同样打开书签管理器,点击“整理”按钮选择“导入书签”,选择之前导出的 HTML 文件即可。其他主流浏览器也支持导入这种格式的书签文件。
597 2
|
2月前
|
Web App开发 JavaScript 前端开发
使用 Chrome 浏览器的内存分析工具来检测 JavaScript 中的内存泄漏
【10月更文挑战第25天】利用 Chrome 浏览器的内存分析工具,可以较为准确地检测 JavaScript 中的内存泄漏问题,并帮助我们找出潜在的泄漏点,以便采取相应的解决措施。
342 9
|
3月前
|
Web App开发 安全 中间件
谷歌、火狐、Edge等浏览器如何使用ActiveX控件
allWebPlugin 是一款为用户提供安全、可靠且便捷的浏览器插件服务的中间件产品,支持 Chrome、Firefox、Edge 和 360 等浏览器。其 V2.0.0.20 版本支持一个页面加载多个插件,并解决了插件与浏览器之间的焦点问题。用户可通过“信息化系统 + allWebPlugin + 插件 + 浏览器”的解决方案实现 ActiveX 插件的无缝集成。下载地址见文末,安装包含详细说明。
|
2月前
|
Web App开发 人工智能 自然语言处理
WebChat:开源的网页内容增强问答 AI 助手,基于 Chrome 扩展的最佳实践开发,支持自定义 API 和本地大模型
WebChat 是一个基于 Chrome 扩展开发的 AI 助手,能够帮助用户理解和分析当前网页的内容,支持自定义 API 和本地大模型。
94 0
|
3月前
|
Web App开发 开发者
|
3月前
|
Web App开发 Windows
win 快捷键大全,虚拟窗口、桌面等操作细节,可以使界面整洁,分类工作;Chrome快捷键,都是一些开发的骚操作
这篇文章提供了Windows操作系统和Chrome浏览器的快捷键大全,以及Xshell的快捷键操作,旨在帮助用户提高工作效率和界面管理。
153 2
|
3月前
|
Web App开发 JSON 安全
Chrome浏览器的跨域问题
【10月更文挑战第6天】