当前位置: 首页 > news >正文

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
<script src="js/JQuery.js"></script>
<script src="js/popup.js"></script>
  1. popup.html 中元素的事件,必须在 popup.js 中使用代码动态绑定。例如:

这样是无法触发的事件的
HTML

<button οnclick="testClick()">测试按钮<button>

JS

function testClick() { alert("测试点击事件"); }

需要像下面一样动态绑定
HTML

<button id="testBTN">测试按钮<button>

JS

$("#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 和 content_scripts 通信

popup.js

// 获取具有指定属性的所有标签页,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

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

http://www.lryc.cn/news/219402.html

相关文章:

  • Spring Security入门教程,springboot整合Spring Security
  • 如何在 Unbuntu 下安装配置 Apache Zookeeper
  • AI视觉领域流媒体知识入门介绍(二):深入理解GOP
  • C++ 代码实例:并查集简单创建工具
  • Hadoop学习总结(Shell操作)
  • LeetCode热题100——链表
  • 使用C++的QT框架实现贪吃蛇
  • 如何发布自己的golang库
  • 梳理自动驾驶中的各类坐标系
  • 一个可以自动把微信聊天收到的二维码图片实时提取出来并分类的软件
  • 02-React组件与模块
  • 项目实战:新增@RequestMapping和@GetMapping和@PostMapping三个注解
  • 基于AOSP源码Android-10.0.0_r41分支编译,framework开发,修改系统默认字体大小
  • 如何再kali中下载iwebsec靶场
  • Spring Boot 使用断言抛出自定义异常,优化异常处理机制
  • vue基于ElementUI/Plus自定义的一些组件
  • leetcode刷题日记:69.sqrt(x)
  • [尚硅谷React笔记]——第9章 ReactRouter6
  • 强大的pdf编辑软件:Acrobat Pro DC 2023中文
  • 玩一下Spring Boot
  • 一个高性能类型安全的.NET枚举实用开源库
  • c#字符串格式化
  • AMD老电脑超频及性能提升方案及实施
  • Github 自动化部署到GitHub Pages
  • Golang 串口通信
  • 项目管理之如何识别并应对项目风险
  • vue封装独立组件:实现手写签名功能
  • 图及谱聚类商圈聚类中的应用
  • npx 和 npm 区别
  • HTML_案例1_注册页面