Greasy Fork

Greasy Fork is available in English.

爱学术网页下载器

下载爱学术原始pdf

当前为 2021-08-17 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         爱学术网页下载器
// @namespace    https://qinlili.bid/
// @version      0.1
// @description  下载爱学术原始pdf
// @author       琴梨梨
// @match        https://www.iresearchbook.cn/f/cdf/read?*
// @icon         https://www.iresearchbook.cn/favicon.ico
// @grant        none
// @run-at        document-idle
// ==/UserScript==

(function() {
    'use strict';

    // 自主开发的下载器公共组件
    var SakiProgress={isLoaded:!1,progres:!1,pgDiv:!1,textSpan:!1,first:!1,alertMode:!1,init:function(t){if(this.isLoaded)console.error("Multi Instance Error-SakiProgress Already Loaded!");else{this.isLoaded=!0,console.info("SakiProgress Initializing!\nVersion:1.0.4\nQinlili Tech:Github@qinlili23333"),this.pgDiv=document.createElement("div"),this.pgDiv.id="pgdiv",this.pgDiv.style="z-index:9999;position:fixed;background-color:white;min-height:32px;width:auto;height:32px;left:0px;right:0px;top:0px;box-shadow:0px 2px 2px 1px rgba(0, 0, 0, 0.5);transition:opacity 0.5s;display:none;",this.pgDiv.style.opacity=0,s()>=9999&&(this.pgDiv.style.zIndex=s()+1),this.first=document.body.firstElementChild,document.body.insertBefore(this.pgDiv,this.first),this.first.style.transition="margin-top 0.5s",this.progress=document.createElement("div"),this.progress.id="dlprogress",this.progress.style="position: absolute;top: 0;bottom: 0;left: 0;background-color: #F17C67;z-index: -1;width:0%;transition: width 0.25s ease-in-out,opacity 0.25s,background-color 1s;",t&&this.setColor(t),this.pgDiv.appendChild(this.progress),this.textSpan=document.createElement("span"),this.textSpan.style="padding-left:4px;font-size:24px;",this.textSpan.style.display="inline-block",this.pgDiv.appendChild(this.textSpan);var i=".barBtn:hover{ background-color: #cccccc }.barBtn:active{ background-color: #999999 }",e=document.createElement("style");e.styleSheet?e.styleSheet.cssText=i:e.appendChild(document.createTextNode(i)),document.getElementsByTagName("head")[0].appendChild(e),console.info("SakiProgress Initialized!")}function s(){let t=[...document.all].map(t=>+window.getComputedStyle(t).zIndex||0);return t.length?Math.max(...t)+1:0}},destroy:function(){this.pgDiv&&(document.body.removeChild(this.pgDiv),this.isLoaded=!1,this.progres=!1,this.pgDiv=!1,this.textSpan=!1,this.first=!1,console.info("SakiProgress Destroyed!You Can Reload Later!"))},setPercent:function(t){this.progress?this.progress.style.width=t+"%":console.error("Not Initialized Error-Please Call `init` First!")},clearProgress:function(){this.progress?(this.progress.style.opacity=0,setTimeout(function(){SakiProgress.progress.style.width="0%"},500),setTimeout(function(){SakiProgress.progress.style.opacity=1},750)):console.error("Not Initialized Error-Please Call `init` First!")},hideDiv:function(){this.pgDiv?this.alertMode?setTimeout(function(){SakiProgress.pgDiv.style.opacity=0,SakiProgress.first.style.marginTop="",setTimeout(function(){SakiProgress.pgDiv.style.display="none"},500)},3e3):(this.pgDiv.style.opacity=0,this.first.style.marginTop="",setTimeout(function(){SakiProgress.pgDiv.style.display="none"},500)):console.error("Not Initialized Error-Please Call `init` First!")},showDiv:function(){this.pgDiv?(this.pgDiv.style.display="",setTimeout(function(){SakiProgress.pgDiv.style.opacity=1},10),this.first.style.marginTop=this.pgDiv.clientHeight+8+"px"):console.error("Not Initialized Error-Please Call `init` First!")},setText:function(t){this.textSpan?this.alertMode?setTimeout(function(){SakiProgress.alertMode||(SakiProgress.textSpan.innerText=t)},3e3):this.textSpan.innerText=t:console.error("Not Initialized Error-Please Call `init` First!")},setTextAlert:function(t){this.textSpan?(this.textSpan.innerText=t,this.alertMode=!0,setTimeout(function(){this.alertMode=!1},3e3)):console.error("Not Initialized Error-Please Call `init` First!")},setColor:function(t){this.progress?this.progress.style.backgroundColor=t:console.error("Not Initialized Error-Please Call `init` First!")},addBtn:function(t){if(this.pgDiv){var i=document.createElement("img");return i.style="display: inline-block;right:0px;float:right;height:32px;width:32px;transition:background-color 0.2s;",i.className="barBtn",i.src=t,this.pgDiv.appendChild(i),i}console.error("Not Initialized Error-Please Call `init` First!")},removeBtn:function(t){this.pgDiv?t&&this.pgDiv.removeChild(t):console.error("Not Initialized Error-Please Call `init` First!")}};
    var XHRDL={isLoaded:!1,dlList:[],listBtn:!1,listDiv:!1,listBar:!1,clsBtn:!1,init:function(){if(this.isLoaded)console.error("Multi Instance Error-WebXHRDL Already Loaded!");else{console.info("WebXHRDL Initializing!\nVersion:Preview0.1.0\nQinlili Tech:Github@qinlili23333");try{SakiProgress.init()}catch{return console.error("Initialize Failed!Is SakiProgress Loaded?"),!1}this.isLoaded=!0,this.listBtn=SakiProgress.addBtn("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjQ4cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjQ4cHgiIGZpbGw9IiMwMDAwMDAiPjxnPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjwvZz48Zz48Zz48cGF0aCBkPSJNMTguMzIsNC4yNkMxNi44NCwzLjA1LDE1LjAxLDIuMjUsMTMsMi4wNXYyLjAyYzEuNDYsMC4xOCwyLjc5LDAuNzYsMy45LDEuNjJMMTguMzIsNC4yNnogTTE5LjkzLDExaDIuMDIgYy0wLjItMi4wMS0xLTMuODQtMi4yMS01LjMyTDE4LjMxLDcuMUMxOS4xNyw4LjIxLDE5Ljc1LDkuNTQsMTkuOTMsMTF6IE0xOC4zMSwxNi45bDEuNDMsMS40M2MxLjIxLTEuNDgsMi4wMS0zLjMyLDIuMjEtNS4zMiBoLTIuMDJDMTkuNzUsMTQuNDYsMTkuMTcsMTUuNzksMTguMzEsMTYuOXogTTEzLDE5LjkzdjIuMDJjMi4wMS0wLjIsMy44NC0xLDUuMzItMi4yMWwtMS40My0xLjQzIEMxNS43OSwxOS4xNywxNC40NiwxOS43NSwxMywxOS45M3ogTTEzLDEyVjdoLTJ2NUg3bDUsNWw1LTVIMTN6IE0xMSwxOS45M3YyLjAyYy01LjA1LTAuNS05LTQuNzYtOS05Ljk1czMuOTUtOS40NSw5LTkuOTV2Mi4wMiBDNy4wNSw0LjU2LDQsNy45Miw0LDEyUzcuMDUsMTkuNDQsMTEsMTkuOTN6Ii8+PC9nPjwvZz48L3N2Zz4="),this.listBtn.onclick=XHRDL.showList,SakiProgress.showDiv(),SakiProgress.setText("初始化下载器..."),SakiProgress.setPercent(20),this.listDiv=document.createElement("div"),this.listDiv.style="z-index:9999;position:fixed;background-color:white;width:auto;margin-top:32px;height:100%;left:0px;right:0px;top:0px;transition:opacity 0.5s;display:none;",this.listDiv.style.opacity=0,this.listBar=document.createElement("div"),this.listBar.style="z-index:10000;position:fixed;background-color:white;min-height:32px;margin-top:32px;width:auto;height:32px;left:0px;right:0px;top:0px;box-shadow:0px 2px 2px 1px rgba(0, 0, 0, 0.5);",this.listDiv.appendChild(this.listBar),document.body.appendChild(this.listDiv);var i=document.createElement("img");i.style="display: inline-block;right:0px;float:right;height:32px;width:32px;transition:background-color 0.2s;",i.className="barBtn",i.src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDI0IDI0IiBoZWlnaHQ9IjQ4cHgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjQ4cHgiIGZpbGw9IiMwMDAwMDAiPjxyZWN0IGZpbGw9Im5vbmUiIGhlaWdodD0iMjQiIHdpZHRoPSIyNCIvPjxwYXRoIGQ9Ik0yMiwzLjQxbC01LjI5LDUuMjlMMjAsMTJoLThWNGwzLjI5LDMuMjlMMjAuNTksMkwyMiwzLjQxeiBNMy40MSwyMmw1LjI5LTUuMjlMMTIsMjB2LThINGwzLjI5LDMuMjlMMiwyMC41OUwzLjQxLDIyeiIvPjwvc3ZnPg==",this.listBar.appendChild(i),i.onclick=function(){XHRDL.hideList()},this.clsBtn=i,SakiProgress.setPercent(100),SakiProgress.setText("下载器已加载!"),setTimeout(function(){SakiProgress.clearProgress(),SakiProgress.hideDiv()},1e3),console.info("WebXHRDL Initialized!")}},destroy:function(i){this.isLoaded&&(i&&SakiProgress.destroy(),this.isLoaded=!1,this.dlList=[],this.listBtn=!1,this.listDiv=!1,this.listBar=!1,this.clsBtn=!1,console.info("WebXHRDL Destroyed!You Can Reload Later!"))},showList:function(){XHRDL.isLoaded?(XHRDL.listDiv.style.display="",setTimeout(function(){XHRDL.listDiv.style.opacity=1},10)):console.error("Not Initialized Error-Please Call `init` First!")},hideList:function(){XHRDL.isLoaded?(XHRDL.listDiv.style.opacity=0,setTimeout(function(){XHRDL.listDiv.style.display="none"},500)):console.error("Not Initialized Error-Please Call `init` First!")},saveTaskList:function(){XHRDL.isLoaded?window.localStorage.setItem("XHRDL_List",JSON.stringify(this.dlList)):console.error("Not Initialized Error-Please Call `init` First!")},loadTaskList:function(){if(XHRDL.isLoaded){var i=window.localStorage;this.dlList=JSON.parse(i.getItem("XHRDL_List"))}else console.error("Not Initialized Error-Please Call `init` First!")},newTask:function(i,e){if(this.isLoaded){var s=this.dlList;s[s.length]={taskUrl:i,fileName:e},SakiProgress.showDiv(),SakiProgress.setText("已添加新任务:"+e),this.DLEngine.isWorking||this.DLEngine.start()}else console.error("Not Initialized Error-Please Call `init` First!")},DLEngine:{isWorking:!1,start:function(){this.isWorking?console.error("WebXHRDL Engine Already Started!"):(console.info("Start WebXHRDL Engine...\nChecking Tasks..."),this.isWorking=!0,SakiProgress.showDiv(),this.dlFirstFile())},stop:function(){this.isWorking=!1,SakiProgress.hideDiv(),SakiProgress.setText(""),XHRDL.dlList[0]?console.info("All Tasks Done!WebXHRDL Engine Stopped!"):console.info("WebXHRDL Engine Stopped!Tasks Paused!")},dlFirstFile:function(){var i=XHRDL.dlList[0];SakiProgress.showDiv(),SakiProgress.setPercent(0),SakiProgress.setText("正在下载"+i.fileName);var e=new XMLHttpRequest;e.responseType="blob",e.onprogress=(e=>{if(e.loaded&&e.total){var s=String(Number(e.loaded)/Number(e.total)*100).substring(0,4);SakiProgress.setText(i.fileName+"已下载"+s+"%"),SakiProgress.setPercent(s)}}),e.onload=(s=>{if(4===e.readyState)if(200===e.status){var t=URL.createObjectURL(e.response);SakiProgress.setText("正在写出"+i.fileName);var o=document.createElement("a"),r=i.fileName;o.href=t,o.download=r,o.click(),window.URL.revokeObjectURL(t),SakiProgress.clearProgress(),XHRDL.dlList.splice(0,1),XHRDL.DLEngine.checkNext()}else SakiProgress.setTextAlert(i.fileName+"暂不支持下载,跳过"),XHRDL.dlList.splice(0,1),XHRDL.DLEngine.checkNext()}),e.onerror=function(e){if(i.errorRetry)SakiProgress.setTextAlert(i.fileName+"下载又失败了,放弃");else{SakiProgress.setTextAlert(i.fileName+"下载失败,置入列尾等待重试"),i.errorRetry=!0;var s=XHRDL.dlList;s[s.length]=i}XHRDL.dlList.splice(0,1),XHRDL.DLEngine.checkNext()},e.open("GET",i.taskUrl),e.send()},checkNext:function(){XHRDL.dlList[0]?this.dlFirstFile():this.stop()}}};
    XHRDL.init();
    //召唤下载按钮
    var dlBtn=document.getElementById("download");
    dlBtn.style="";
    dlBtn.onclick=function(){
        var dlUrl=window.location.origin+DEFAULT_URL;
        var flName=document.title.substr(0,document.title.indexOf(" -"))+".pdf";
        XHRDL.newTask(dlUrl,flName);
    }
})();