学习着编写了一款chrome小插件

news2024/11/16 7:44:10

背景介绍

半年前有幸分享了一下浏览器开发者工具的技术分享,当时的PPT在写至最后处总感觉理论讲解多于代码分享,于是琢磨着编写一下相关的代码,在经过一番苦思冥想后最终锁定了浏览器插件编写的实现上,所以在经过一番知识百科后,略微掌握了一部分的理论知识,随着深入的了解后,于是就实现了一个小小的插件,算是技术知识总结吧,或许是为了备忘吧,也或许是为了丰富本站博客技术文章内容吧,也就有了本文。本文以代码实践为主,直接上代码(懒得去花太多事件了)。

manifest.json

{
  "name": "渣渣插件",
  "version": "1.0.0",
  "manifest_version": 2,
  "description": "这是一款比较简单的插件示例。",
  "browser_action": {
    "default_icon": "statics/images/logo.png" ,
    "default_title": "渣渣插件",
    "default_popup": "templates/popup.html"
  },
  // 注册打开快捷键
  "commands": {
    "_execute_browser_action": {
      "suggested_key": {
        "default": "Ctrl+Shift+X"
      },
      "description": "Opens popup.html"
    }
  },
  // 权限
  "permissions": [
    "tts",
    "notifications"
  ]
}

popup.js

/**
 * @author chendd
 */
;(function (w) {

    w.onload = function () {

        {
            var date = new Date().toLocaleString();
            //FIXME 智能语音,可区分日期和金额等数字
            var content = "今天是" + date + ",距离新的一年还有剩余 " + getDaysRemaining() + " 天!";
            document.getElementById("content_text_id").value = content;
        }

        document.getElementById("example_btn_id").addEventListener("click" , function (ev) {
            // rate配置项可以修改语音朗读速度,1为正常速度
            var content = document.getElementById("content_text_id").value;
            chrome.tts.speak(content, {
                rate: 0.8,
                onEvent: function(event) {
                    if(event.type !== 'end') {
                        return;
                    }
                    chrome.notifications.create("saveSuccess", {
                        type: "basic",
                        iconUrl: "../statics/images/logo.png",
                        title: "提示",
                        message: "操作执行成功!"
                    });
                }
            });

        } , true);
    };

    /**
     * 计算今年剩余天数
     * 实现方案一:利用本年最后一天的时分秒 - 当前日期的时分秒 = 剩下的时分秒毫秒,再除以一天24小时的时分秒
     * 实现方案二:计算今天是今年的第几天,再根据平年和闰年计算剩余天数
     * 实现方案三:根据实际的年月日自行累加计算,最为准确
     * @returns {number}
     */
    function getDaysRemaining() {
        // 今天的标准时间
        var today = new Date();
        // 本年最后标准时间
        var endYear = new Date(today.getFullYear() + 1, 0, 1, 0, 0, 0);
        // 一天的毫秒数
        var ms = 24 * 60 * 60 * 1000;
        // 计算剩余毫秒除以一天的毫秒数,就是天数
        return Math.round((endYear.getTime() - today.getTime()) / ms);
    }

})(window);

运行示例

(插件安装)

(插件运行)

示例说明

(1)chrome插件的编写一般有3种交互场景,分别是显示于工具栏位置的小图标、激活插件时的弹框(本例激活插件时属于一个弹出框)、新打开浏览器窗口、鼠标右键等;

(2)插件的运行需要定制浏览器的运行权限,本例使用到了浏览器的语音阅读插件(语音播报比较给力,会自动识别金额、日期、单词等)、弹出通知提示框插件;

(3)运行插件时弹出插件主窗口,默认显示当前日期的年月日时分秒的文本(可随意修改文本域的内容),点击朗读按钮将语音阅读该段文本,待最终阅读完毕后弹出“操作执行成功!”的通知提示;

(4)插件源码下载,可直接解压后使用浏览器的开发者模式来加载运行,点击此处下载《chrome-plugin-examples.zip》;

(5)源码编写比较业余,使用IDEA编写;

参见个人博客:学习着编写了一款chrome小插件

学习着编写了一款chrome小插件欢迎来到陈冬冬的个人经验分享平台https://www.chendd.cn/blog/article/1645726321451282433.html

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

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

相关文章

(OpenAI)ChatGPT注册登录常见问题错误代码及其解决方法

在使用 ChatGPT 的时候我们可能会碰到一些错误的代码,本文统一来介绍一下每一种错误以及解决方法。 错误代码1. 不能在当前国家使用 出现场景:一般在注册或登录的时候会出现。 原因:主要是ChatGPT检测到当前访问所在的地区不允许访问导致。 …

如何在Java中使用同步回调和异步回调

文章目录(一)同步回调(1)匿名内部类回调(2)Lambda 回调(二)异步回调(1)简单的线程回调(2)异步并行回调(3)Comp…

python 时间序列分解案例——加法分解seasonal_decompose

文章目录一、模型简介1.1 加法分解模型1.2 乘法分解模型1.3 分析步骤二、案例2.1 背景 & 数据 & python包2.2 分析过程一、模型简介 1.1 加法分解模型 加法分解模型适用于随着时间推移趋势和季节性变化不断累加,并且随机波动比较稳定的时间序列数据。该模…

初识linux之线程互斥

目录 一、线程互斥的概念 1. 多线程下全局数据的安全问题 2 线程互斥相关背景概念 二、线程加锁 1. 锁生成和销毁 2. 对一个锁加锁 3. 对一个锁解锁 三、解决多线程并发式访问临界资源问题 四、如何看待锁 1. 锁限制线程串行访问 2. 加锁和解锁的原子性 五、对锁进…

数学体操之牛顿数值法解方程的程序和图解

牛顿法是一种用来寻找函数零点的迭代方法,它基于以下思路,如果我们知道了一个函数在某个点的切线,那么函数的零点就可以通过切线与x轴的交点来近似计算。 给定一个函数,找到零点,过程如下: 选择初始点,然后使用这个点处的切线来近似,也就是…

java超详细的jvm调优

JVM调优 看这篇博客之前,可以先看我另外两篇 Java虚拟机(Jvm详解) Java垃圾回收机制(后续更新) 下面主要从以下几个方面进行展开描述: JVM实践调优主要步骤分析GC日志堆内存与元空间优化线程堆栈优化堆内存内部优化&#xff…

软件质量保证与软件测试 第五周(数据流测试)+第六周(集成测试开了个头)

数据流测试 1 定义/使用测试 一些概念的定义 例题理解概念 例子1: 定义清除的理解:就是说,如果路径上又遇到了其他定义节点,那就不是。 例子2: 第一步:先画程序图: 第二步:再…

什么是 AWS Lambda 冷启动问题?

什么是 AWS Lambda 冷启动问题? AWS Lambda 是一个无服务器计算平台,使开发人员能够快速构建和部署应用程序,而无需管理任何底层基础设施。但是,这种便利性也带来了一个缺点,即 AWS Lambda 冷启动问题。由于冷启动问题…

sgg第二天Java的语法

关键字 关键字(keyword)的定义和特点 定义:被Java语言赋予了特殊含义  特点:关键字中所有字母都为小写  注意,关键字不能被用作标识符! 保留字 Java保留字:现有Java版本尚未使用,但以后版本可能会作为关键字使 …

Qt Quick - 弹出控件综述

Qt Quick - 弹出控件综述一、概述一、抽屉控件二、菜单控件三、弹出控件四、工具提示控件一、概述 控件功能Dialog带有标准按钮和标题的弹出式对话框,用于与用户进行短期交互Drawer可以用滑动手势打开和关闭的侧面板Menu弹出式菜单,可以用作上下文菜单或…

springboot事务

对于从事 java 开发工作的同学来说,spring 的事务肯定再熟悉不过了。 在某些业务场景下,如果一个请求中,需要同时写入多张表的数据。为了保证操作的原子性(要么同时成功,要么同时失败),避免数据…

设备是如何实现延时关机的

文章目录1. 引言2. 延时关机的实现方式2.1 自建定时服务实现2.2 RocketMQ中间件实现2.2.1 生成端demo2.2.2 消费端demo3. 结尾1. 引言 在设备联动中,有些场景需要保持设备继续工作一段时间再关机。比如在厨房场景下,存在燃气灶和烟机的联动场景&#xf…

基于kettle部署图形化界面(spoon)

最近使用kettle部署windows,mac、linux服务遇到的坑做一个总结。 1、mac、linux部署: 1⃣️拉取docker镜像 docker pull hiromuhota/webspoon 2⃣️创建并运行docker容器 docker run -d -p 8080:8080 hiromuhota/webspoon --name webspoon --restar…

HTML:彩虹按钮

彩虹按钮&#xff08;盗版按钮&#xff0c;B站仿写&#xff0c;略有不同&#xff01;&#xff09; 链接 <html><head><title>demo</title><style>*{margin: 0;padding: 0;}body{display: flex;justify-content: center;align-items: center;…

【hello Linux】Linux软件管理器yum

目录 1.Linux软件管理器yum 1.1 关于lrzsz 1.2 使用yum时的注意事项 1.3 查看软件包&#xff1a;yum list 1.4 安装软件&#xff1a;yum install 1.5 卸载软件&#xff1a;yum remove 1.6 更新yum源 1.7 实战项目 Linux&#x1f337; 1.Linux软件管理器yum 在windows系统下有应…

交友项目【查询黑名单人员,移除黑名单人员】功能实现

目录 1&#xff1a;交友项目 1.1&#xff1a;查询黑名单人员 1.1.1&#xff1a;接口地址 1.1.2&#xff1a;流程分析 1.1.2&#xff1a;代码实现 1.2&#xff1a;移除黑名单人员 1.2.1&#xff1a;接口地址 1.2.2&#xff1a;流程分析 1.2.3&#xff1a;代码实现 1&am…

【LeetCode每日一题: 1039. 多边形三角剖分的最低得分 | 暴力递归=>记忆化搜索=>动态规划 | 区间dp 】

&#x1f34e;作者简介&#xff1a;硕风和炜&#xff0c;CSDN-Java领域新星创作者&#x1f3c6;&#xff0c;保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享&#x1f48e;&#x1f48e;&#x1f48e; &#x1f34e;座右…

0416 leetcode每日一题 1042. 不邻接植花

题目描述&#xff1a; 力扣 思路&#xff1a; 从题目描述中可知&#xff0c;花的种类一共有四种&#xff0c;且一定有满足题意的答案。 可以首先将所有花园中的花设置为0&#xff0c;然后遍历与其相邻的花园&#xff0c;选择没有使用过的花的种类&#xff08;1 2 3 4&#xf…

【ChatGPT】阿里版 ChatGPT 突然官宣意味着什么?

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 阿里版 ChatGPT 突然官宣 ​ ChatGPT 技术在 AI 领域的重要性 自然语言生成 上下文连续性 多语言支持 ChatGPT 未来可能的应用场景 社交领域 商业领域 ​编辑 医疗领域…

LeetCode_单调栈_中等_1019.链表中的下一个更大节点

目录1.题目2.思路3.代码实现&#xff08;Java&#xff09;1.题目 给定一个长度为 n 的链表 head。对于列表中的每个节点&#xff0c;查找下一个更大节点的值。也就是说&#xff0c;对于每个节点&#xff0c;找到它旁边的第一个节点的值&#xff0c;这个节点的值严格大于它的值…