chrome扩展控制popup页面动态切换

文章目录

  • 1、通过控制元素的显示隐藏达到popup页面切换的效果
  • 2、通过监听页面重新加载完成不同popup的切换
  • 3、直接修改popup页面location.href,无需刷新页面

1、通过控制元素的显示隐藏达到popup页面切换的效果

下面在mv2版本的API下完成

实际上通过控制页面元素实现popup页面切换,是一种伪切换,从视觉上达到了切换效果,实际上还是一个popup.html

  1. popup.html示例
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div id="id_1" style="display: none;">内容一</div><div id="id_2" style="display: none;">内容二</div><div id="id_3" style="display: block;">内容三</div>
</body>
</html>
  1. 判断展示哪一个div的内容
// 引入jquery// do something 逻辑判断,控制元素显示隐藏
$("#id_1").css({display: 'block'}) // 控制#id_1的元素展示
$("#id_2").css({display: 'none'}) // 其他的隐藏
$("#id_3").css({display: 'none'})

2、通过监听页面重新加载完成不同popup的切换

不需要在manifest里单独配置browser_action,通过所在的页面决定使用哪一个popup.html页面

  1. 准备两个popup.html

path:/popup_1.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div id="popup_1" style="display: block;">popup_1</div>
</body>
</html>

path:/popup_2.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div id="popup_2" style="display: block;">popup_2</div>
</body>
</html>
  1. 监听页面url判断加载哪个popup.html
// 注入需要先在manifest里面配置api的权限
// mv2版本API// 监听页面加载的API
chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {console.log(tabId, changeInfo, tab)console.log(chrome)// 页面加载中if (changeInfo.status === 'loading') {// 当前标签页在百度页面打开popup_1.html、否则打开popup_2.htmlif (tab.url.indexOf('www.baidu.com') > 0) {chrome.browserAction.enable(tabId) // 在这个标签的为tabId的页面启用popup.htmlchrome.browserAction.setPopup({tabId: tabId,popup: '/popup_1.html'})} else {chrome.browserAction.enable(tabId) // 在这个标签的为tabId的页面启用popup.htmlchrome.browserAction.setPopup({tabId: tabId,popup: '/popup_2.html'})}}// 页面加载完成if (changeInfo.status === 'complete') {// do something}
})		
需要注意的是通过**chrome.browserAction.setPopup**设置后的popup页面不会直接改变,重新打开popup图标页面改变。

3、直接修改popup页面location.href,无需刷新页面

这种方式popup.html的路径会直接改变,页面也会随着改变,不需要重新打开popup或者重新加载页面.

同样使用标题2中的页面示例:
popup.js

// do something逻辑判断console.log(chrome.runtime)// 获取/popup_1.html页面在扩展中的位置
chrome.runtime.getURL('/popup_1.html').then(url => {// url = chrome://extensions/xxxxx/popup_1.html// 直接修改当前popup页面的location.href页面直接改变,不需要重新打开扩展和重新刷新页面location.href = url
})

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【密码学】五、序列密码

序列密码 1、概述1.1序列密码的分类1.1.1同步序列密码1.1.2自同步序列密码 2、序列密码的组成2.1密钥序列生成器KG2.2有限状态自动机 3、LFSR 1、概述 采用一个短的种子密钥来控制某种算法获得长的密钥序列的办法&#xff0c;用以提供加解密&#xff0c;这个种子密钥的长度较短…

Qt 5. QSerialPort串口收发

1. 代码 //ex2.cpp #include "ex2.h" #include "ui_ex2.h" #include <QtSerialPort/QSerialPort> #include <QtSerialPort/QSerialPortInfo>int static cnt 0;Ex2::Ex2(QWidget *parent): QDialog(parent), ui(new Ui::Ex2) {ui->setupUi…

写Acknowledgement的时候,latex日志出现警告

用latex写论文的时候&#xff0c;\section{Conclusion}下面添加 \backmatter \bmhead{Acknowledgments}时报错&#xff1a;错误log&#xff1a; \bmhead Package hyperref Warning: Difference (4) between bookmark levels is greater than one, level....错误原因&#xff…

【深度学习】InST,Inversion-Based Style Transfer with Diffusion Models,论文,风格迁移,实战

代码&#xff1a;https://github.com/zyxElsa/InST 论文&#xff1a;https://arxiv.org/abs/2211.13203 文章目录 AbstractIntroductionRelated WorkImage style transferText-to-image synthesisInversion of diffusion models MethodOverview ExperimentsComparison with Sty…

Java版企业电子招标采购系统源代码Spring Boot + 二次开发 + 前后端分离 构建企业电子招采平台之立项流程图

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及审…

android 如何分析应用的内存(十四)——jdb命令行

android 如何分析应用的内存&#xff08;十四&#xff09; 前面的系列文章介绍了android应用如何分析native内存。 接下来就是android应用如何分析java内存。同native一样&#xff0c;我们也希望能够看到 ART的堆和栈的情况&#xff0c;以及锁的情况&#xff0c;方法的本地变…

【驱动开发day8作业】

作业1&#xff1a; 应用层代码 #include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <string.h> #include <sys/ioctl.h>int main(int…

代码随想录算法训练营day51

文章目录 Day51 最佳买卖股票时机含冷冻期题目思路代码 买卖股票的最佳时机含手续费题目思路代码 Day51 最佳买卖股票时机含冷冻期 309. 买卖股票的最佳时机含冷冻期 - 力扣&#xff08;LeetCode&#xff09; 题目 给定一个整数数组&#xff0c;其中第 i 个元素代表了第 i 天…

Docker安装es以及ik分词器

1、拉取镜像 docker pull elasticsearch:7.10.12、下载对应版本的ik分词、并将它们解压到ik文件夹下&#xff0c;如图 https://github.com/medcl/elasticsearch-analysis-ik/releases 3、在服务器上创建文件夹 mkdir /usr/elklog/elk/es mkdir /usr/elklog/elk/es/data mkdi…

Web3教程| 如何发现并追踪“聪明钱”?

在加密领域&#xff0c;聪明钱&#xff08;Smart Money&#xff09;是指拥有专业知识、对市场有深入了解以及具有信息优势的专业投资机构或个人投资者。 聪明钱一直以来都是加密市场中的关注焦点&#xff0c;因为这些实体通常可以获得普通交易者不易获得的信息和资源&#xff0…

【Web开发指南】如何用MyEclipse进行JavaScript开发?

由于MyEclipse中有高级语法高亮显示、智能内容辅助和准确验证等特性&#xff0c;进行JavaScript编码不再是一项繁琐的任务。 MyEclipse v2023.1.2离线版下载 JavaScript项目 在MyEclipse 2021及以后的版本中&#xff0c;大多数JavaScript支持都是开箱即用的JavaScript源代码…

ChatGPT:人工智能交互的新时代

ChatGPT的背景和发展&#xff1a; ChatGPT是OpenAI公司在GPT-3基础上的进一步升级。GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一种基于Transformer架构的深度学习模型&#xff0c;它能够处理自然语言&#xff0c;实现自动对话、写作等任务。而ChatGPT在…

【运维】hive 终端突然不能使用:Hive Schema version does not match metastore‘s schema version

文章目录 一. 问题描述二. 常规排查1. 元数据库2. hive-site.xml相关meta连接信息检查 三. 正解 一. 问题描述 进入hive终端&#xff0c;执行如下命令报错&#xff1a; hive> show tables; FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: …

Entity Framework(EF)查询

一、In 查询 var list = dbContext.Users.Where(u => new int[] {1, 2, 3, 5,

冒泡排序算法

冒泡排序 算法说明与代码实现&#xff1a; 简单分析&#xff0c;外循环次数为数据len(arr)-1次&#xff0c;内循环为len(arr)-外循环次数 下面是使用Go语言实现冒泡排序算法的示例&#xff1a; package mainimport "fmt"func bubbleSort(arr []int) {n : len(arr…

【JavaEE】简单了解JVM

目录 一、JVM中的内存区域划分 二、JVM的类加载机制 1、类加载的触发时机 2、双亲委派模型 1.1、向上委派 1.2、向下委派 三、JVM中的垃圾回收机制&#xff08;GC&#xff09; 1、确认垃圾 1.1、引用计数&#xff08;Java实际上没有使用这个方案&#xff0c;但是Pytho…

【HttpRunnerManager】搭建接口自动化测试平台实战

目录 一、需要准备的知识点 二、我搭建的环境 三、搭建过程 四、访问链接 五、两个问题点 【整整200集】超超超详细的Python接口自动化测试进阶教程&#xff0c;真实模拟企业项目实战&#xff01;&#xff01; 一、需要准备的知识点 1. linux: 安装 python3、nginx 安装和…

emWin - BMP图片显示

BmpCvt.exe 用途 利用BMP图片&#xff0c;进行GUI显示&#xff1b;ICON等图标都是小BMP图片&#xff0c;核心是将BMP图片&#xff0c;转成emWin支持的方式&#xff0c;最终显示到TFT屏上 使用BmpCvt.exe工具&#xff0c;将各个图片转成相应的C文件. emWin有关的工具&#xff…

Redis的数据淘汰策略

目录 一、概念 二、redis有哪些数据淘汰策略 三、注意事项 四、怎么选择数据淘汰策略 五、总结 一、概念 Redis的数据淘汰策略指的是在内存不足的情况下&#xff0c;如何决定哪些数据需要被淘汰以释放内存空间&#xff0c;当Redis中的内存不够用时&#xff0c;此时在向Red…

测试|Selenium介绍及环境搭建

测试|Selenium介绍及环境搭建 1.Selenium是什么 Selenium是用来做web网站 UI自动化的测试工具/测试框架。 我们这里说的Selenium是Selenium2.0&#xff0c;它由Selenium IDE&#xff0c;Webdriver, Selenium Grid组成。 Selenium IDE是用于Selenium测试的完成集成开发环境&…