chrome 扩展 popup 弹窗的使用

popup的基本使用方法

popup介绍

popup 是点击 browser_action 或者 page_action图标时打开的一个小窗口网页,焦点离开网页就立即关闭,一般用来做一些临时性的交互。

popup配置

V3版本中(V2版本是在 browser_action 中 ),可以通过配置文件(manifest.json)中 action 里面的default_popup 字段来指定 popup 页面,也可以调用 setPopup() 方法。

使用popup的注意事项:

  1. popup 页面的生命周期一般很短,需要长时间运行的代码千万不要写在 popup 里面。
  2. 所有的页面元素都写在 popup.html 中,css 也可以写在 popup.html 中的 <style> 标签里面,当然也可以写在一个单独的css中引入。但是JS 代码必须是一个单独的 JS 文件,在 popup.html<script> 标签中写 JS无效的 。通过<script>标签引入 popup.js 即可。另外,其他的一些库也可引入的,例如: jquery
html 复制代码
<script src="js/JQuery.js"></script>
<script src="js/popup.js"></script>
  1. popup.html 中元素的事件,必须在 popup.js 中使用代码动态绑定。例如:

这样是无法触发的事件的

HTML

html 复制代码
<button οnclick="testClick()">测试按钮<button>

JS

javascript 复制代码
function testClick() { alert("测试点击事件"); }

需要像下面一样动态绑定

HTML

html 复制代码
<button id="testBTN">测试按钮<button>

JS

javascript 复制代码
$("#testBTN").click(function() { alert("测试点击事件"); });
  1. popup.js 中要与web页面通信,permissions 需要 activeTab 权限。
  2. 强制 popup.html 关闭可以使用:window.close();
  3. popup.js 如果要 调试/查看控制台 的话,在弹出的 popup.html 页面,点击鼠标右键,然后选择 检查 即可。通过 F12 打开的是网址页面的控制台,并不是 popup 的。
  4. popup 中可以直接通过 chrome.extension.getBackgroundPage() 获取 backgroundwindow 对象。

popup.js

javascript 复制代码
// 获取具有指定属性的所有标签页,active: true 标签页在窗口中是否为活动标签页;currentWindow 标签页是否在当前窗口中。
chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
	// 取出当前标签页的 tag_id, 发送一个消息出去, 同时带上回调函数
	chrome.tabs.sendMessage(tabs[0].id, { action: "info", select_type: select_type }, function (response) {
		// 回调函数(传回的信息)
		if (response.result) {
			// 关闭 popup.html 页面
            window.close();
        } else {
            alert(response.note)
        }
    });
});

content_scripts

javascript 复制代码
chrome.runtime.onMessage.addListener(
	function (request, sender, sendResponse) {
	    if (request.action == 'info') {
	        // 赋值
	        window.select_type = request.select_type;
	        window.all_url = request.all_url;
	        window.user_id = request.user_id;
	        window.password = request.password;
	
	        switch (window.select_type) {
	            case '1':
	            	// code...
	            	// 返回数据
                    sendResponse({
                        result: true
                    });
	                break;
	            case '2':
	                if (1) {
	                    sendResponse({
	                        result: true
	                    });
	                } else {
	                    sendResponse({
	                        result: false,
	                        note: '请填写网址和账号密码'
	                    });
	                }
	                break;
	        }
	    } else {
	        sendResponse({
	            result: false,
	            note: '操作失败'
	        });
	    }
	}
);

其他:

非官方的中文文档:https://chrome.noonme.com/extensions/messaging.html

关于chrome扩展,介绍比较全的一片文章:https://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html

相关推荐
夜焱辰4 小时前
浏览器端 Agent 的文件版本管理:不用 Git,基于 OPFS + SQLite 自己造了一个
前端·人工智能
梦想的颜色4 小时前
TypeScript 完全指南(下):从类型体操到生产级配置
前端·javascript·typescript
Hi~晴天大圣5 小时前
npm使用介绍
前端·npm·node.js
888CC++6 小时前
如何在 C 语言中进行程序调试?
前端·javascript·算法
喵个咪6 小时前
基于 Taro 的 Headless CMS 多端前端架构:技术解析与二次开发导引
前端·react.js·taro
狂炫冰美式6 小时前
你还在古法PPT吗,试试HTML呢?免费编辑导出工具给 xdm 放这了
前端·后端·github
万少7 小时前
未来组织的分水岭不是员工数量,而是人才密度
前端·后端·面试
任磊abc7 小时前
nextjs16配置eslint+prettier
前端·eslint·nextjs·prettier
x***r1517 小时前
Another-Redis-Desktop-Manager.1.3.7安装步骤详解(附Redis可视化连接与Key管理教程)
前端·bootstrap·html
Captaincc7 小时前
你真的知道自己把 AI 用在了哪里吗?这是 Vibe Usage 想回答的问题
前端·vibecoding