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

相关推荐
vvw&33 分钟前
如何在 Ubuntu 22.04 上安装 Caddy Web 服务器教程
linux·运维·服务器·前端·ubuntu·web·caddy
落日弥漫的橘_3 小时前
npm run 运行项目报错:Cannot resolve the ‘pnmp‘ package manager
前端·vue.js·npm·node.js
梦里小白龙3 小时前
npm发布流程说明
前端·npm·node.js
No Silver Bullet3 小时前
Vue进阶(贰幺贰)npm run build多环境编译
前端·vue.js·npm
怜渠客3 小时前
Google Chrome 去除更新 Windows
chrome·windows
破浪前行·吴3 小时前
【初体验】【学习】Web Component
前端·javascript·css·学习·html
泷羽Sec-pp4 小时前
基于Centos 7系统的安全加固方案
java·服务器·前端
IT 古月方源4 小时前
GRE技术的详细解释
运维·前端·网络·tcp/ip·华为·智能路由器
myepicure8884 小时前
Windows下调试Dify相关组件(1)--前端Web
前端·llm
用户59594399272194 小时前
大牛工程师告诉你:开关电源“Y电容”都是这样计算的!
前端