Chrome 侧边栏开发示例

前言

最近做项目,需要开发浏览器扩展,但是考虑页面布局兼容性问题,使用了Chrome114开始的侧边栏,浏览器自带的能力毕竟不会出现兼容性问题,不过Chrome123开始,侧边栏居然又可以选择固定右侧扩展栏了,交互变化很大。

API

官方文档:  https://developer.chrome.com/docs/extensions/reference/sidePanel/ 

可惜需要科学上网

大致意思是从Chrome114开始有了侧边栏的新功能,其中的open方式打开侧边栏的API是Chrome116开始的。

笔者Chrome已经升级到123了,所以

出现了固定按钮

开发指南

那么从无到有开发一个侧边栏吧

官方示意图,不过Chrome各个版本API的迭代很快,网上很多教程都是基于老版本API和version开发的,在开发功能时,就需要考虑Chrome删除旧API的情况,毕竟新API出现很久了。

Chrome插件的几个核心理念,popup(右上角的图标与相关的页面和事件);content-script(页面注入和js注入,与Chrome的原始页面交互);background(crx后台运行,只要插件启用且Chrome没关闭);sidepanel(新功能,侧边栏)

manifest

定义扩展名称等元数据 

{
    "name": "Hello Demo",
    "description": "Base Level Extension",
    "version": "1.0",
    "manifest_version": 2,

    "browser_action": {
        "default_popup": "popup.html",
        "default_icon": "popup.png"
}

定义图标,元数据版本号 ,当然需要一些敏感权限时还要申请权限,通过开发者模式就可以加载未封装的扩展了。

点击扩展,就有弹窗,旁边是原扩展,笔者自己写的只能是提取图标了,根据开源协议是OK的

     

如果我们打包,并安装未在Chrome商店的扩展就不能启用

另外写的扩展有个错误,点击进去,不过到目前为止,还是可以用version为2的版本,另外sidepanel必须使用version为3.

sidePanel

升级v3版本,毕竟v2版本要被Chrome移除了,开启侧边栏

基本上manifest各种配置都改了,API变化真大

{
    "name": "Hello Demo",
    "description": "Base Level Extension",
    "version": "1.0",
    "manifest_version": 3,
    "action": {
        "default_title": "Click to view a popup",
        "default_popup": "popup.html"
    },
    "icons": {
        "128": "popup.png"
    },
    "background": {
          "service_worker": "background.js" 
        },
    "side_panel": {
        "default_path": "popup.html",
        "openPanelOnActionClick": true
    },
    "permissions":["sidePanel"]

}

Chrome123之前是右上角有个侧边栏的按钮,在侧边栏切换各个扩展,Chrome123可以邮件扩展图标

事件联动

实际上事件联动,一般会经过background的js进行中转,比如发送message

比如先创建右键菜单,发送标签消息,就可以在content-script的js里面消费

//background js
function sendMessageToContentScript(message, callback){
	chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
		chrome.tabs.sendMessage(tabs[0].id, message, function(response){
			if(callback) callback(response);
		});
	});
}


chrome.contextMenus.create({
    id: "send_panel",
	title: '使用侧边栏处理:%s', // %s表示选中的文字
	contexts: ['selection'] // 只有当选中文字时才会出现此右键菜单
});
chrome.contextMenus.onClicked.addListener(function(params){
    if(params.menuItemId=='send_panel'){
        console.log(params.selectionText);
        sendMessageToContentScript({cmd:'test', value:params.selectionText}, function(response){
	        console.log('来自content的回复:'+response);
        });
    }
});

给权限

"permissions":["sidePanel","contextMenus", "tabs"]

重新加载后

 

刷新网页,选中文本,右键

用自己写的对文本进行发送消息,但是tab的消息只能当前tab消费,如果要给background和popup或者sidePanel发送消息,必须使用全局消息

function sendMessageToContentScript(message, callback){
	/* chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
		chrome.tabs.sendMessage(tabs[0].id, message, function(response){
			if(callback) callback(response);
		});
	}); */
    chrome.runtime.sendMessage(message, function(response) {
        console.log('收到来自后台的回复:' + response);
    });
}

在panel的js消费

<html>
    <header>
        
    </header>
    <body>
        <h1 id="panel_demo">Hello panel Extension</h1>
        <script type="text/javascript" src="panel.js"></script>
    </body>
</html>

//js文件
function recive_msg(){
    chrome.runtime.onMessage.addListener(function(message, sender,sendResponse) {
        if(message.cmd == 'test') {
            //alert(message.value);
            document.querySelector("#panel_demo").innerHTML = message.value;
        }
        sendResponse('我收到了你的消息!');
    });
}

alert("haha");
recive_msg();

这里要考虑一件事,在background是无法使用alert函数的。

 

点击确定后

总结

实际上Chrome插件的开发比较简单,不过Chrome文档不好查看,现存的很多文档都是旧版本,而Chrome的扩展API变化很大,尤其是V3版本,示例中的侧边栏必须使用V3版本,而且需要Chrome114或者Chrome116的版本才能使用,并且在Chrome123版本侧边栏交互体验又重大变化,本身侧边栏的用处不是特别大,主要是网上文档比较少,所以写了一篇简单文档,本质上是需要查看Chrome扩展的官方文档,毕竟官方文档是最完整最新的文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/562347.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++的初步知识——命名空间,缺省参数,重载函数

C 首先写一段代码&#xff1a; #include <stdio.h>int main() {printf("Hello world\n");return 0; }这段C语言代码在cpp文件中仍可运行。我们了解C是兼容C语言的&#xff0c;C的关键字中就包含了C语言的关键字和自身的关键字。关于关键字&#xff0c;我们简…

LCR 039

. - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/0ynMMM/ 给定非负整数数组 heights &#xff0c;数组中的数字用来表示…

共享内存和信号灯集练习

#include <mystdio.h> int main(int argc, const char *argv[]) { //创建key值 key_t key ftok("/home/ubuntu",2); if(key<0) { perror("ftok"); return -1; } printf("key%#x\n",key); …

上位机图像处理和嵌入式模块部署(树莓派4b和类muduo网络编程)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 既然是linux编程&#xff0c;那么自然少不了网络编程。在linux平台上面&#xff0c;有很多的网络编程库可以选择&#xff0c;大的有boost、qt&…

【Linux】系统安全及应用

目录 一、账号安全基本措施 1.系统账号清理 2.密码安全控制 3.历史命令安全管理 4.限制su切换用户 1&#xff09;将信任的用户加入到wheel组中 2&#xff09;修改su的PAM认证配置文件 5.ssh远程登录输入三次密码错误则锁定用户 二、Linux中的PAM安全认证 1.su命令的…

革命性创新,实景AI无人自动直播系统,轻松实现24小时日不落直播卖券。

革命性创新&#xff01;实景AI无人自动直播系统&#xff0c;轻松实现24小时日不落直播卖券&#xff01; 最近&#xff0c;越来越多的朋友纷纷关注到了AI自动直播带货的新玩法&#xff0c;并且也都想要开设自己的自动直播间。然而&#xff0c;对于这种自动讲解、自动回复的直播…

【Qt 学习笔记】Qt常用控件 | 显示类控件Label的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 显示类控件Label的使用及说明 文章编号&#xff1a;Qt 学…

C语言枚举类型详解

下午好诶&#xff0c;今天小眼神给大家带来一篇C语言枚举类型详解的文章~ 目录 一、枚举类型的声明 二、枚举类型的优点 三、枚举类型的使用 一、枚举类型的声明 枚举顾名思义就是 一 一 列 举 。 比如&#xff1a; 一周从周一到周日共有七天&#xff0c;可以一一列举。 性…

Next.js多页布局getLayout使用方法

目录 官网解释 直接上代码使用方法展示 1.page页面​编辑 2._app.js页面,也放在pages中​编辑 效果展示 有getLayout展示getLayout返回的页面布局 无getLayout展示默认布局 官网解释 如果需要多个布局&#xff0c;可以添加一个属性getLayout添加到您的页面&#xff0c;允…

xpath的使用以及原理-元素定位

# 查找文本框输入文本 driver.find_element(By.CLASS_NAME,"nav-search-input").send_keys("i_cecream查找到了") #查找到之后点击 driver.find_element(By.CLASS_NAME,"nav-search-btn").click()time.sleep(30)selenium4的解析。 client调用se…

【draw.io的使用心得介绍】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

webpack-babel2

浏览器的兼容性问题 浏览器的兼容性问题不知包括随屏幕大小而变化&#xff0c;还包括针对浏览器支持的特性&#xff08;如css特性&#xff0c;js特性&#xff09; 做处理。 目前市场上有很多浏览器&#xff1a;Chrome,Safari,IE,Edge等&#xff0c;要根据它们的市场占有率来决…

数据分析(1)

数据分析基础&#xff08;1&#xff09; 为了让刚开始学习的朋友对数据分析有一个清晰的整体认识&#xff0c;因此笔者在此对数分进行一个较为详细的介绍有助于大家更好的在宏观层面进行理解&#xff0c;避免在后续学习中产生迷茫。 数据分析的概念 定义&#xff1a;数据分析…

Linux系统-进程和计划任务管理

一.程序和进程 1.程序 保持在硬盘、光盘等介质中的可执行代码和数据文件中静态保存的代码 2.进程 在CPU及内存中运行的程序代码动态执行的代码父、子进程每个程序可以创建一个或多个进程 3.进程特征 动态性&#xff1a;进程是程序的一次执行过程&#xff0c;是临时的&…

项目小游戏-贪吃蛇

目录 1.游戏开始 - GameStart 1.1cmd命令窗口 调节窗口命令 ​编辑更改窗口命名 ​编辑 1.2 Win32 API win32 API 的介绍: ​编辑 获取控制台坐标COORD 获取控制台句柄: 获取缓冲台光标信息: 获取虚拟键位: 本地初始化 setlocale(); 游戏开始的具体实现&#xff1a…

Cyber Weekly #3

赛博新闻 1、Meta发布最强开源模型Llama3[1] 4月19日凌晨&#xff0c;Meta Llama 3发布&#xff0c;模型包含8B和70B两种参数规模&#xff08;400B还在训练中&#xff09;&#xff0c;Llama 3使用了超过 15T token的训练数据&#xff0c;8B版本数据更新截止至2023年3月&#…

属性文件出现问号,更改配置文件的编码格式

场景 场景&#xff1a;配置了properties文件&#xff0c;结果涉及到中文的部分都是问号原因&#xff1a;因为配置文件的默认编码格式iso的&#xff0c;这种编码格式下压根没有中文解决方案&#xff1a;使用IDEA将全局编码格式设置为utf-8 第一步&#xff1a;File->Settings-…

SRS WebRTC Whip 和 Whep 部署体验问题

whip 報錯 404 webrtc推流 小窗口一闪而过&#xff0c;然后查看f12回复404的报错信息 chrome版本&#xff1a; 正在检查更新 版本 123.0.6312.123&#xff08;正式版本&#xff09; &#xff08;64 位&#xff09; centos 7.9 源码安装部署&#xff0c; 代码分支5.0 完全按…

判断完数(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int n 0;int i 1;int j 0;int result 1;//提示用户&#xff1b;printf("请输入一个…

指针专题(3)

1.前言 本节我们书接上文&#xff0c;继续进行指针专题的学习&#xff0c;夯实指针的基础&#xff0c;那么废话不多说&#xff0c;我们正式进入今天的学习 2.字符指针变量 我们知道&#xff0c;字符指针的形式为char*&#xff0c;我们可以取出一个字符的地址&#xff0c;并且…