阅读:1515回复:1
一个下载漫画的脚本,不能再火狐上用
只有chrome上才能下,在火狐上点击下载没反应,该怎么修改
// ==UserScript== // @name 扑飞漫画下载 // @namespace http://saber.love/?p=3407 // @version 1.0 // @description 下载扑飞漫画,保存到浏览器的下载文件夹里。从任意页面下载皆可,会一直下载到最后一页(自动跨章节下载) // @match http://www.pufei.net/* // @license GNU General Public License version 3 // @grant GM_xmlhttpRequest // @grant GM_download // @connect dx.yogajx.com // @connect i.yogajx.com // @connect p.yogajx.com // @connect i.hamreus.com // @connect dx.hamreus.com // @connect p.szhkshop.com // @connect pic.fxdm.cc // @connect us.hamreus.com // @connect static.7jfb.cn // @run-at document-end // ==/UserScript== let fileName = document.getElementById("position-common").getElementsByTagName("a")[3].innerText; //当前文件名 let pageTotal = document.querySelectorAll('option').length; // 本章共有几页 let imgUrl = document.getElementById("viewimg").src; //图片网址 let pageNum = document.getElementsByTagName("select")[0].value; // //当前为第几页 let userStop, output, outputE; let sessionKey = 'continueDown'; // 创建开始下载按钮 let startDownload = document.createElement('a'); startDownload.id = 'startDownload'; startDownload.innerHTML = '开始下载'; let addSpace = document.createElement('br'); startDownload.style= "font-weight:bold; font-size:14px; font-family:Verdana, Arial, Helvetica, sans-serif; color:#FFFFFF; background-color:#98bf21; width:120px; text-align:center; padding:4px; text-decoration:none; cursor:pointer"; document.getElementsByTagName("h1")[0].appendChild(addSpace); document.getElementsByTagName("h1")[0].appendChild(startDownload); //停止下载按钮 let endDownload = document.createElement('a'); endDownload.id = 'endDownload'; endDownload.innerHTML = '停止下载'; endDownload.style= "font-weight:bold; font-size:14px; font-family:Verdana, Arial, Helvetica, sans-serif; color:#FFFFFF; background-color:#98bf21; width:120px; text-align:center; padding:4px; text-decoration:none; cursor:pointer"; document.getElementsByTagName("h1")[0].appendChild(endDownload); // 点击下载按钮时执行 document.querySelector('#startDownload').addEventListener('click', () => { // 检查下载 API if (GM_info.downloadMode != 'browser') { window.open('http://wx4.sinaimg.cn/large/640defebly1fylaafiwzcj20k00zk753.jpg'); return false; } userStop = false; addOutput(); setDownloadStatus(true); // 每次下载时初始化 readyDownload(); // 点击下载按钮时,首先下载当前页 }); // 是否自动继续下载 if (sessionStorage.getItem('continueDown') !== null) { document.querySelector('#startDownload').click(); // 模拟点击,自动继续下载 } /*----------------------------------------------------------我是分割线-----------------------------------------------------------*/ //以下为函数部分 function addOutput() { // 创建用于输出提示信息的区域 document.querySelector('#endDownload').addEventListener('click', () => { if (!userStop) { userStop = true; setDownloadStatus(false); } }); outputE = document.querySelector('#endDownload'); } function setDownloadStatus(boolean) { if (boolean) { sessionStorage.setItem(sessionKey, 'yes'); } else { sessionStorage.removeItem(sessionKey); } // sessionStorage 对当前标签页生效(对从当前标签页里打开的页面也生效)。标签页关闭后自动清除。可以解决用户不经过确认直接关闭页面时,没有正常解锁的情况 } function readyDownload() { window.stop(); if (userStop) { return false; } GMDownload(); } function GMDownload() { // 用于下载图片 if (imgUrl.indexOf('[') > -1 || imgUrl.indexOf(']') > -1) { //如果url里含有[]这两个符号,会被encodeURI编码掉。所以encodeURI之后要在转换回来(我在这地方被坑了数小时)。但为什么下边还要再encodeURI一次?不经过二次encodeURI就不行,我也是好晕啊 imgUrl = (encodeURI(imgUrl).replace(/%5B/g, '[')).replace(/%5D/g, ']'); } else if (imgUrl.indexOf('%') > -1 && imgUrl.indexOf('%26') < 0) { //如果含有已经转码过的汉字,就全解码成汉字,再编码。%26是排除&符号。但为什么还是需要第二次编码? imgUrl = encodeURI(decodeURI(imgUrl)); } else { //虽然不知道为什么,总之编码两次就对了 imgUrl = encodeURI(imgUrl); } let fullFileName = fileName + pageNum + ".jpg"; //设置文件名 后缀名都改为jpg // outputE.innerHTML = '正在下载 ' + fileName + '第' + pageNum + '页 点击可设置停止。'; outputE.innerHTML = '停止下载 '; GM_xmlhttpRequest({ method: 'GET', url: imgUrl, headers: { referer: window.location.href.split("?")[0] }, overrideMimeType: 'text/plain; charset=x-user-defined', onload: function (xhr) { let r = xhr.responseText, data = new Uint8Array(r.length), i = 0; while (i < r.length) { data = r.charCodeAt(i); i++; } let blob = new Blob([data], { //manhuagui现在多数都是webP格式的图片,但是设置type的话可能存在兼容性问题,所以还是当做jpg type: 'image/jpeg' }); let blobURL = window.URL.createObjectURL(blob); GM_download({ url: blobURL, name: fullFileName, onload: function () { window.URL.revokeObjectURL(blobURL); } }); setTimeout(() => { // 在测试时,发现漫画的页面加载太快,导致很多下载的图片来不及保存,所以加上延时。 if (pageNum === pageTotal) { //如果已经最后一页 document.querySelector('.next').click(); // 点击下一章 let t = setInterval(() => { if (document.querySelector('#box')) { //如果出现提示框,则认为没有下一章了 clearInterval(t); userStop = true; setDownloadStatus(false); alert('已经到达最后一页,下载完毕!'); return false; } }, 500); } else { //如果还有下一页 document.querySelector('.next').click(); // 点击下一页按钮 } }, 500); } }); } |
|
1楼#
发布于:2019-01-12 16:53
|
|