用JS给官方电子课本扩展个下载功能

为了方便学生、老师和家长,官方提供了几乎所有在用的正版电子课本,由于没有下载功能,只能在线看,有点不方便。

为了更方便使用,用JS外挂了一个下载按钮。

扩展后效果如图:

(根据2022年版课程标准修订)义务教育教科书·道德与法治一年级上册 (smartedu.cn)

扩展安装地址:SmartEdu pdf download 

以下是主要代码,有兴趣可以自己修改优化:

// ==UserScript==
// @name         SmartEdu pdf download
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  pdf download from SmartEdu 
// @author       JackieZheng
// @match        https://basic.smartedu.cn/tchMaterial/detail?contentType=assets_document&contentId=*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=smartedu.cn
// @grant        GM_addStyle
// @license MIT
// ==/UserScript==
 
GM_addStyle("#downBtn{border-radius: 6px;width: 45px;margin: 5px auto;}");
GM_addStyle("#downBtn>a{width: 45px;margin: 0;padding: 2px 0 2px 0;}");
GM_addStyle("#downBtn>a>i{height: 30px;width: 30px;background: #f6f7f9;display: block;border-radius: 6px;margin: 3px auto 13px auto;");
 
(function() {
    window.setTimeout(()=>{
        var matchReg = /(?<=file=).*?\.pdf/gi;
        let frameSrc=document.querySelector('iframe')?.src;
        let pdfUrl=frameSrc.match(matchReg)[0];
        console.log(pdfUrl);
        let pdf=pdfUrl.replace('-private','');
        console.log(pdf);
        document.querySelector('iframe').src=pdf;
 
        let toolBar=document.querySelector('div[class^=index-module_fn]');
        let clsName=toolBar.childNodes[0].className;
        var downloadBtn = document.createElement("div");
        downloadBtn.setAttribute("id", "downBtn");
        downloadBtn.onclick = function() {
            let fileName = pdf.substring(pdf.lastIndexOf('/') + 1);
            downloadFile(pdf,decodeURI(fileName)) ;
        }
        // download="'+pdf+'"  href="'+pdf+'"
        downloadBtn.innerHTML ='<a  class="'+clsName+'" ><i><svg viewBox="0 0 1210 1024" width="24" height="30"><path d="M186.181818 74.472727A111.709091 111.709091 0 0 0 74.472727 186.181818v651.636364A111.709091 111.709091 0 0 0 186.181818 949.527273h837.818182a111.709091 111.709091 0 0 0 111.709091-111.709091V186.181818A111.709091 111.709091 0 0 0 1024 74.472727H186.181818zM186.181818 0h837.818182a186.181818 186.181818 0 0 1 186.181818 186.181818v651.636364a186.181818 186.181818 0 0 1-186.181818 186.181818H186.181818a186.181818 186.181818 0 0 1-186.181818-186.181818V186.181818a186.181818 186.181818 0 0 1 186.181818-186.181818z m516.654546 642.327273v-65.163637a162.909091 162.909091 0 1 0-158.533819-199.819636 32.581818 32.581818 0 0 1-49.338181 20.014545A97.652364 97.652364 0 1 0 442.181818 577.163636h65.163637v65.163637H442.181818a162.909091 162.909091 0 1 1 50.920727-317.533091A226.769455 226.769455 0 0 1 702.836364 186.181818C828.555636 186.181818 930.909091 288.488727 930.909091 414.254545c0 125.765818-102.353455 228.072727-228.072727 228.072728z m23.04 42.123636a32.581818 32.581818 0 0 1 0 46.08l-97.745455 97.745455a32.581818 32.581818 0 0 1-46.08 0l-97.745454-97.745455a32.581818 32.581818 0 0 1 46.08-46.08l42.123636 42.123636V512a32.581818 32.581818 0 1 1 65.163636 0v214.574545l42.123637-42.123636a32.581818 32.581818 0 0 1 46.08 0z" fill="#2a6bed"></path></svg></i><p>下载PDF</p></a>';
        toolBar.insertBefore(downloadBtn,toolBar.childNodes[0])
    },5000);
 
 
})();
 
function downloadFile(url, fileName) {
    fetch(url)
        .then(response => response.blob())
        .then(blob => {
        const link = document.createElement('a');
        link.href = URL.createObjectURL(blob);
        link.download = fileName;
        link.target = "_blank";
        link.click();
    });
}

 GitHub:GitHub - JackieZheng/SmartEdu: pdf download from SmartEdu

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

fastadmin 部署后前台会员中心出现404错误

访问前台会员中心出现404错误。 解决&#xff1a;nginx访问站点增加伪静态 location / {if (!-e $request_filename){rewrite ^(.*)$ /index.php?s$1 last; break;} }在phpstydy中增加伪静态&#xff0c;如图&#xff1a;

基于java的工费医疗报销管理系统设计与实现

博主介绍&#xff1a;专注于Java vue .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的…

专题六_模拟_算法详细总结

目录 模拟算法 1.模拟算法流程&#xff08;一定要在草稿纸上演算一遍流程&#xff09; 2.把流程转换成代码 1. 替换所有的问号&#xff08;easy&#xff09; 解析&#xff1a; 1.暴力&#xff1a; 2.优化&#xff1a;&#xff08;找规律&#xff09; 总结&#xff1a; …

Vue3+Element Plus:使用el-dialog,对话框可拖动,且对话框弹出时仍然能够在背景页(对话框外部的页面部分)上进行滚动以及输入框输入信息

【需求】 使用Element Plus中的el-dialog默认是模态的&#xff08;即它会阻止用户与对话框外部的元素进行交互&#xff09;&#xff0c;对话框弹出时仍然能够在背景页&#xff08;对话框外部的页面部分&#xff09;上进行滚动以及输入框输入信息&#xff0c;且对话框可拖动 【…

TCP/IP五层模型

OSI七层模型 OSI(Open Systems Interconnection)七层模型是一种概念框架&#xff0c;用于标准化不同计算机系统之间的通信过程 它由国际标准化组织(ISO)在1984年提出&#xff0c;主要用于网络通信 这七层模型从上到下分别是: 应用层(Application Layer):为应用软件提供网络服…

tomcat服务器

tomcat简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器。Tomcat 虽然和 Apache 或者 Nginx 这些 Web 服务器一样&#xff0c;具有处理 HTML 页面的功能&#xff0c;然而由于其处理静态 HTML 的能力远不及 Apache 或者 Nginx&#x…

Leetcode 93-复原 IP 地址

有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’ 分隔。 例如&#xff1a;“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址&#xff0c;但是 “0.011.255.245”、“192.168.…

计算机毕业设计 服装生产管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

MySQL之表内容的增删改查(含oracel 9i经典测试雇佣表下载)

目录 一:Create 二:Retrieve 1.select列 2.where条件 3.结果排序 4. 筛选分页结果 三:Update 四:Delete 1.删除数据 2. 截断表 五&#xff1a;插入查询结果 六&#xff1a;聚合函数 七:group by子句的使用 表内容的CRUD操作 : Create(创建), Retrieve(读取)…

Win10 录屏秘籍大公开:从新手到高手的进阶之路

之前因为某些原因不方便到客户那里进行软件培训&#xff0c;我们就发现录屏讲解供客户随时查看的方式好像更有效果。这次我就介绍一些能够实现win10怎么录屏操作的工具讲解。 1.福昕录屏大师 链接&#xff1a;www.foxitsoftware.cn/REC/ 这个工具是一款专业的电脑录屏软件&a…

【三大运营商】大数据平台体系架构【顶层规划设计】

在国内运营商&#xff08;如中国移动、中国联通、中国电信&#xff09;的大数据平台建设中&#xff0c;顶层规划设计至关重要。以下是针对三大运营商为例【如电信】的大数据平台体系架构的顶层规划设计方案&#xff0c;涵盖整体架构、关键组件、数据管理、应用场景等方面。 1. …

2023年全国研究生数学建模竞赛华为杯B题DFT类矩阵的整数分解逼近求解全过程文档及程序

2023年全国研究生数学建模竞赛华为杯 B题 DFT类矩阵的整数分解逼近 原题再现&#xff1a; 一、问题背景   离散傅里叶变换&#xff08;Discrete Fourier Transform&#xff0c;DFT&#xff09;作为一种基本工具广泛应用于工程、科学以及数学领域。例如&#xff0c;通信信号…

react 基础语法

前置知识 类的回顾 通过class关键字定义一个类 类名首字母大写 class类有constructor构造器 new 一个类得到一个实例 类还有方法&#xff0c;该方法也会在其原型上 static静态数据&#xff0c;访问静态属性通过 类名.id getter和setter getter&#xff1a;定义一个属性&…

kubernetes存储之GlusterFS(GlusterFS for Kubernetes Storage)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

Agent Zero

文章目录 一、关于 Agent Zero现在有了UI&#xff1a;关键概念1、General-purpose 助理2、计算机作为工具3、多智能体合作4、完全可定制和可扩展5、沟通是关键 不错的功能记住已知问题理想的环境 二、Setup - 如何在Windows和MacOS上安装Agent Zero提醒&#xff1a;1、安装Cond…

Tiny-universe学习笔记1:Qwen-blog

本文是参与Datawhale Tiny-universe组队学习的第一篇学习笔记&#xff0c;参考链接&#xff1a;https://github.com/datawhalechina/tiny-universe Tiny-universe学习笔记1&#xff1a;Qwen-blog Qwen整体架构与Llama2类似&#xff0c;具体如下图所示&#xff1a; 其中&#…

深度学习笔记(8)预训练模型

深度学习笔记&#xff08;8&#xff09;预训练模型 文章目录 深度学习笔记&#xff08;8&#xff09;预训练模型一、预训练模型构建一、微调模型&#xff0c;训练自己的数据1.导入数据集2.数据集处理方法3.完形填空训练 使用分词器将文本转换为模型的输入格式参数 return_tenso…

Java | Leetcode Java题解之第417题太平洋大西洋水流问题

题目&#xff1a; 题解&#xff1a; class Solution {static int[][] dirs {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};int[][] heights;int m, n;public List<List<Integer>> pacificAtlantic(int[][] heights) {this.heights heights;this.m heights.length;this.n…

【JSrpc破解前端加密问题】

目录 一、背景 二、项目介绍 三、JSrpc 处理前端加密步骤 一、背景 解决日常渗透测试、红蓝对抗中的前端密码加密问题&#xff0c;让你的爆破更加丝滑&#xff1b;降低js逆向加密的难度&#xff0c;降低前端加密逻辑分析工作量和难度。 二、项目介绍 运行服务器程序和js脚本…

springCloud(一)注册中心

1.Eureka 要是user-service服务有多个&#xff0c;order-service该怎么调用&#xff1f; 这就需要用到 注册中心 了 。 1.1 搭建Eureka服务 1. pom引入依赖 <dependencies><!--eureka服务端--><dependency><groupId>org.springframework.cloud</gr…