国图下载器

通过劫持中间数据下载原始PDF,虽然方法非常扭曲,但能跑起来

目前为 2022-05-30 提交的版本。查看 最新版本

作者
琴梨梨OvO
评分
0 0 0
版本
0.4
创建于
2022-03-14
更新于
2022-05-30
大小
3.1 KB
许可证
MPLv2
适用于

// ==UserScript==
// @name 国图下载器
// @namespace https://qinlili.bid/
// @version 0.4
// @description 通过劫持中间数据下载原始PDF,虽然方法非常扭曲,但能跑起来
// @author 琴梨梨
// @match *://read.nlc.cn/static/webpdf/indexnobj.html?*
// @match *://read.nlc.cn/static/webpdf/index.html?*
// @match *://read.nlc.cn/static/webpdf/left.html?*
// @match *://read.nlc.cn/static/webpdf/right.html?*
// @homepage https://github.com/qinlili23333/nlcDownloader
// @supportURL https://github.com/qinlili23333/nlcDownloader
// @icon http://read.nlc.cn/static/style/images/gutu_logo.jpg
// @grant none
// @run-at document-body
// @license MPLv2
// ==/UserScript==

(function() {
'use strict';
const dlFile = (link, name) => {
let eleLink = document.createElement('a');
eleLink.download = name;
eleLink.style.display = 'none';
eleLink.href = link;
document.body.appendChild(eleLink);
eleLink.click();
document.body.removeChild(eleLink);
}

let injectWorker=`(function(open) {
XMLHttpRequest.prototype.open = function(method, url, async, user, pass) {
if (!(async === false)) {
async = true;
};
if(url.indexOf("OutOpenBook/getReader")>0){
console.log(url)
console.log("捉住下载请求了喵!正在监控喵!")
this.addEventListener('load', event=>{
console.log("下载完成了喵!正在导出文件!");
const pdfFile=URL.createObjectURL(new Blob([this.response]));
console.log(pdfFile);
postMessage("pdfFile:"+pdfFile)
});
}
open.call(this, method, url, async, user, pass);
};
})(XMLHttpRequest.prototype.open);
const originImport=self.importScripts;
self.importScripts=src=>(originImport("http://read.nlc.cn/static/webpdf/lib/"+src));`
const originWorker=window.Worker
window.Worker= function(aurl,options) {
if(aurl.indexOf("WebPDFJRWorker.js")>=0){
console.log("捉住Worker请求了喵!")
console.log(aurl)
var oReq = new XMLHttpRequest();
oReq.open("GET", aurl,false);
oReq.send();
const mergedWorker=URL.createObjectURL(new Blob([injectWorker+oReq.response]))
console.log("给Worker加点料!寄汤来咯!")
let hookWorker= new originWorker(mergedWorker,options);
hookWorker.addEventListener('message', (event) => {
if(!(typeof event.data=="object")&&event.data.startsWith("pdfFile")){
console.log("下载!冲冲冲!")
event.stopPropagation();
event.preventDefault();
dlFile(event.data.substr(8),"nlc.pdf")
}
},true);
return hookWorker;
}else{
return new originWorker(aurl,options);
}
}
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址