热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

chromebrowser70.0.3538.80_Chrome插件开发入门

什么是Chrome插件Chrome插件是一个用Web技术开发、用来增强浏览器功能的软件,它其实就是一个由HTML、CSS、JS、图片等资源组成的一个.crx后缀的压缩

2d7d242d6c67feb6837eaff00c4a1e3f.png

什么是Chrome插件

        Chrome插件是一个用Web技术开发、用来增强浏览器功能的软件,它其实就是一个由HTML、CSS、JS、图片等资源组成的一个.crx后缀的压缩包。

        Chrome插件开发的技术栈是由Web技术(HTML,CSS,JS,图片等)和 Chrome 底层 API 组成;完成插件开发后编译成 .crx 压缩包发布到应用商店;插件的不同模块之间是相对独立的,模块之间的数据交互是异步通信,通信连接包含了短连接和长连接。

六大核心

1manifest配置文件

        manifest.json 是 Chrome 插件中必须的配置文件,且必须放到项目的根目录,文件中包括名字、版本、面板,权限,js 策略等配置,具体内容如下:

{  // manifest_version版本必须是2 "manifest_version": 2, "version": "1.0.0", "name": "插件名字", "description": "插件功能描述", // 设置插件的图标,分别是19,38,128 "icons": { "19": "assets/icons/icon_19.png", "38": "assets/icons/icon_38.png", "128": "assets/icons/icon_128.png" }, // 后台脚本配置 "background": { "scripts": ["./background.js"] }, // 右上角面板配置项 "browser_action": { "default_popup": "./popup.html" }, // 注入页面脚本基本配置 "content_scripts": [ { // 表示匹配所有地址 "matches": [""], // 多个JS按顺序注入 "js": ["./assets/js/jquery.min.js", "./contentScripts.js"], // 注入到页面时刻,枚举值有["document_start"|"document_end"|"document_idle"] "run_at": "document_end", // 控制JS文件是否在匹配的Web页面中的所有框架中运行,默认false表示只在顶层框架中运行 "all_frames": true } ], // 注入页面脚本安全配置  "content_security_policy": "script-src 'self' 'unsafe-eval' 'self'", // 插件设置面板配置 "options_ui": { "chrome_style": false, "page": "./options.html" }, // 开发工具扩展配置 "devtools_page": "devtools.html", "homepage_url": "插件中的官网地址URL", // 插件需要的访问权限 "permissions": [ "http://*/*", "https://*/*", "file://*/*", "background", "bookmarks", "clipboardRead", "clipboardWrite", "contentSettings", "COOKIEs", "*://*.google.com/",    "debugger" ], // 设置Web站点页面能够访问插件资源的列表 "web_accessible_resources": [], // 覆盖页面 "chrome_url_overrides": { // 覆盖新tab页面 chrome://history "newtab": "newtab.html", // 覆盖历史记录页面 chrome://newtab "history": "history.html", // 覆盖书签页面chrome://bookmarks "bookmarks": "bookmarks.html" }}2content-scripts脚本

        content-scripts脚本是注入当前web页面中的 js 脚本;在 manifest.json 中的 content_scripts 节点配置;它有如下特点:

  • 可以操作站点页面 Dom 结构;

  • 不能访问站点中的 js 脚本;

  • 只能访问部分 Chrome 的 API;

例如:

// 页面加载完,设置页面背景为红色$(window).on('load', () => { $(document.body).css({ background: 'red', })})3background脚本

        background脚本是运行在后台的 js 脚本;在 manifest.json 中的 background 节点配置;它有如下特点:

  • 生命周期是插件中最长的,覆盖了插件启动到结束;

  • 除了 devtools 外可以访问大部分 chromeAPI;

常用于创建页面右键菜单、创建 omnibox 向用户提供搜索建议和抽象公共接口服务等;

// 创建右键菜单chrome.contextMenus.create({  title: '京东搜:%s', // %s表示选中的文字 contexts: ['selection'], // 只有当选中文字时才会出现此右键菜单  onclick(params) { chrome.tabs.create({      url: `https://search.jd.com/Search?keyword=${encodeURIComponent( params.selectionText )}`, }) },})

效果:

de4bd39ab7b0fabf70aa5f492fac6afa.png

4browser-action弹窗

        browser-action弹框是插件右上角独立操作面板;在 manifest.json 中的 browser_action 节点配置;其中 default_popup 入口是 html 文件;除了 devtools 外可以访问大部分 chromeAPI;常用于用户交互操作,如下图:

df79394c1ecb43d6a7eb08353bc45904.png

5devtools面板

官网的关系图:

46856617f2dd6fccd641b4d4ae8f29ef.png

        扩展开发者工具,在 manifest.json 中的 devtools_page 节点配置;允许开发自定义 Elements、Console、Sources 等同级别的面板,比如 Vue Devtools 和 React Devtools;它的生命周期同开发者工具一致的;并包含了特有的 API 如下:

// 获取面板相关的APIChrome.devtools.panels// 获取审查窗口信息的APIChrome.devtools.inspectedWindow// 获取网络请求的信息Chrome.devtools.network

例如:

// devtools.jschrome.devtools.panels.elements.createSidebarPane('我的面板', sidebar => {  sidebar.setPage('../newpage.html'); sidebar.setHeight('100vh');});

// newpage.html   head> 我是新面板 body>html>

效果:

6c62399480e468ea916652f108aa1c88.png

6options设置面板

        options设置面板是插件的用户设置,在 manifest.json 中的 options_ui 节点配置;常用于让用户自定义选择想要的功能。

桌面通知

        创建桌面通知,一般在 background 和 browser_action 中创建,代码如下:

chrome.notifications.create({ type: 'basic', iconUrl: '图标地址', title: '这是标题', message: '这是提示内容',})

效果:

8a72c81690823635e9fb2a08e81bcbe7.png

工程化

        以 webpack 为例,使用 webpack 插件 webpack-extension-reloader 实现热加载,其中热加载服务端口 参数 port,强加载参数 reloadPage,入口参数 entries 对应 webpack 的 entry 参数中的 key,extensionPage 是扩展的入口参数;

示例如下:

var ExtensionReloader = require('webpack-extension-reloader')new ExtensionReloader({ port: 9090, reloadPage: true, entries: { background: 'background', options: 'options', popup: 'popup', contentScripts: 'contentScripts', extensionPage: [], },})

JS权限控制表

JS 种类

可访问的 API

DOM 访问情况

JS 访问情况

是否可跨域

injectedScript和普通 JS 无任何差别,不能访问 Chrome API可以可以

contentScript只能访问 extension、runtime 等部分 API可以

不可

popup.js除了 devtools 外  

不可

不可

background.js除了 devtools 外  

不可

不可

devtools.js

只能访问 devtools、extension、runtime 等部分 API可以可以

消息通信表

injectedScript

contentScript

popup.js

background.js

injectedScript

-

postMessage

--

contentScript

postMessage

-

sendMessage 和 connect

sendMessage 和 connect

popup.js

-

sendMessage 和 connect

-

getBackgroundPage

background.js

-

sendMessage 和 connect

getViews

-

devtools.js

inspectedWindow.eval

-

sendMessage

sendMessage




推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了在使用vue和webpack进行异步组件按需加载时可能出现的报错问题,并提供了解决方法。同时还解答了关于局部注册组件和v-if指令的相关问题。 ... [详细]
author-avatar
awdewqd65_988
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有