您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
provide a direct link to original image ([s] link).
当前为
- // ==UserScript==
- // @name Pixiv Lazy plus
- // @namespace pixivlazyplus
- // @description provide a direct link to original image ([s] link).
- // @version 0.8.14.1
- // @include http://www.pixiv.net/*
- // ==/UserScript==
- // version 0.8.14.1 - fix new medium page layout
- // version 0.8.13 - fix image response lazy link position
- // version 0.8.12 - fix mypage right side lazy links
- // version 0.8.11 - fix double links in medium page
- // version 0.8.10 - fix double links in medium page
- // version 0.8.9 - append [U] link after canvas
- // version 0.8.8 - fix loading big manga URL bug introduced in 0.8.7
- // version 0.8.7 - fix loading big manga URL in with PNG format
- // version 0.8.6 - fix modifying big manga URL in manga page
- // version 0.8.5 - fix preloading new manga URL format
- // version 0.8.4 - fix detecting URL new format
- // version 0.8.3 - fix detecting URL new format
- // version 0.8.2 - fix detecting URL new format
- // version 0.8.1 - fix detecting ugoira in prev/next
- // version 0.8.0 - add ability for downloading ugoira as zip
- // version 0.7.9 - fix for no profile image
- // version 0.7.8 - fix for spapi return value changes
- // version 0.7.7 - change [s] to [M](go directly to manga page) for manga links
- // version 0.7.6 - fix prev/next [s] link
- // version 0.7.5 - fix new manga page
- // version 0.7.4 - fix modified images
- // version 0.7.3 - fix missing session ID when it is not the end of cookie
- // version 0.7.2 - fix comma in tags breaking parsing logic
- // version 0.7.1 - fix iPhone API by supplying session ID
- // version 0.7 - work with new sample images with iPhone API, fix old manga
- // version 0.6.1 - preload manga images
- // version 0.6 - change manga mode to big images
- // version 0.5 - remove [b] link, add stylish style class
- // version 0.4 - updated to filter new thumbnails
- // version 0.3 - fix a bug, hat-tip to syosyo
- // version 0.2 - updated on 2008-06-25
- var pixivlink_run = 0;
- var isNewManga = 1;
- var postProcImg = new Array();
- var preloadImg = new Array();
- var Imgs = new Array();
- var sessID = (/PHPSESSID=[^;]*?(?=;|$)/.exec(document.cookie) || "");
- var mangaFormat = 'jpg';
- String.prototype.splitCSV = function(sep) {
- for (var foo = this.split(sep = sep || ","), x = foo.length - 1, tl; x >= 0; x--) {
- if (foo[x].replace(/"\s+$/, '"').charAt(foo[x].length - 1) == '"') {
- if ((tl = foo[x].replace(/^\s+"/, '"')).length > 1 && tl.charAt(0) == '"') {
- foo[x] = foo[x].replace(/^\s*"|"\s*$/g, '').replace(/""/g, '"');
- } else if (x) {
- foo.splice(x - 1, 2, [foo[x - 1], foo[x]].join(sep));
- } else foo = foo.shift().split(sep).concat(foo);
- } else foo[x].replace(/""/g, '"');
- } return foo;
- };
- function GetImageIDFromLink(imageLink) {
- var imgID = 0; // If lower 11319936 it means Manga does not have Big version
- var re = /\d+([_a-z0-9]+)?\.(jpe?g|gif|png)\??.*$|id=[0-9]+$/;
- var s = re.exec(imageLink);
- if (s && s.length > 0) {
- re = /\d+/;
- imgID = re.exec(s[0])[0];
- }
- return imgID;
- }
- function getElementsByClassName(matchClass) {
- var clselems = new Array();
- var elems = document.getElementsByTagName('*'), i;
- for (i in elems) {
- if((' ' + elems[i].className + ' ').indexOf(' ' + matchClass + ' ')
- > -1) {
- clselems.push(elems[i]);
- }
- }
- return clselems;
- }
- function pixivlink() {
- //alert(pixivlink_run);
- if (!pixivlink_run) pixivlink_run = 1;
- else return;
- var Items = document.getElementsByTagName('img');
- var rexa = /\?mode\=medium\&illust_id|\?mode\=big\&illust_id/;
- var rexb = /source.pixiv.net/;
- var rexc = /\/img-inf\//;
- var rexd = /\/mobile\//;
- var rexe = /\/c\//;
- for (var i = 0; i < Items.length; i++) {
- var imgR = Items[i];
- var aR = imgR.parentNode.parentNode;
- var aR2 = imgR.parentNode;
- var isThumbnail = ((' ' + aR2.className + ' ').indexOf(' _layout-thumbnail ') > -1) && ((' ' + aR2.className + ' ').indexOf(' ui-modal-trigger ') > -1)
- if (rexa.test(aR2.href) || isThumbnail) {
- aR = aR2;
- }
- if (rexa.test(aR.href) || isThumbnail) {
- var imgID = GetImageIDFromLink(imgR.src);
- var srcR = imgR.src.replace(/_s\.|_m\.|_100\.|_64x64\./i, ".");
- // var hrefR = aR.href.replace(/medium/i, "big");
- var tdR = aR.parentNode;
- /* var linkB = document.createElement('a');
- linkB.href = hrefR;
- linkB.target = '_blank';
- linkB.style.padding = '0 2px';
- linkB.className = '_pxlazy';
- linkB.appendChild(document.createTextNode('[b]'));
- tdR.appendChild(linkB);*/
- // tdR.appendChild(document.createTextNode(' '));
- if (!rexb.test(srcR) && Imgs.indexOf(imgID) == -1) {
- var linkS = document.createElement('a');
- linkS.href = srcR;
- linkS.target = '_blank';
- linkS.className = '_pxlazy _pxlazy_s';
- linkS.setAttribute('id', 'ill_' + imgID);
- linkS.appendChild(document.createTextNode('[s]'));
- if (aR2.tagName.toUpperCase() == 'DIV' && imgR.className.toLowerCase().indexOf('thumbnail') == -1) {
- var targetelem = getElementsByClassName('works_display');
- if(targetelem.length) {
- targetelem[0].appendChild(linkS);
- }
- } else {
- tdR.appendChild(linkS);
- }
- if (rexc.test(imgR.src)||rexd.test(imgR.src)||rexe.test(imgR.src)) {
- //GM_log("postProcImg.push("+imgID+")"+imgR.src);
- postProcImg.push(imgID);
- }
- Imgs.push(imgID);
- }
- }
- }
- if (postProcImg.length > 0) {
- for (var x = 0; x < postProcImg.length; x++) {
- GM_xmlhttpRequest({
- url: 'http://spapi.pixiv.net/iphone/illust.php?' + sessID + (sessID ? '&' : '') + 'illust_id=' + postProcImg[x],
- method: "GET",
- headers: {
- Referer: "http://www.pixiv.net"
- },
- onload: function (response) {
- if (response.status == 200) {
- var rexb = /source.pixiv.net/;
- // var rexU = /\/c\//;
- var rexU = /_480mw\./;
- var rexe = /\/c\//;
- var vals = response.responseText.splitCSV();
- /*var vtxt = '';
- for(var x=0;x < vals.length;x++)
- vtxt=vtxt+x+':'+vals[x]+"\n";
- GM_log(vtxt);*/
- if (vals.length > 0) {
- var slnk, imgID, isRestricted;
- isRestricted = rexb.test(vals[6]);
- isUgoira = !rexU.test(vals[9]);
- if (!isRestricted) {
- //GM_log("imgID = vals[0]");
- imgID = vals[0];
- } else {
- //GM_log("GetImageIDFromLink("+response.finalUrl+")");
- imgID = GetImageIDFromLink(response.finalUrl);
- }
- slnk = document.getElementById('ill_' + imgID);
- if (slnk) {
- var goodSlink;
- if (vals[19].length > 0) {
- goodSlink = 'http://www.pixiv.net/member_illust.php?mode=manga&illust_id=' + imgID;
- slnk.innerHTML = '[M]';
- } else {
- var re = new RegExp('/' + vals[0] + '_.*$');
- if (isUgoira) {// grab zip!
- //GM_log("isUgoira");
- slnk.innerHTML = '[U]';
- goodSlink = vals[9].replace(/c\/\d+x\d+\/img-master/, 'img-zip-ugoira').replace(re, '/' + vals[0] + '_ugoira1920x1080.zip');
- } else if (rexe.test(vals[9])) {// new 480mw URL
- //GM_log("480mw");
- goodSlink = vals[9].replace(/c\/480x960\//, '').replace(/img-master/, 'img-original').replace(re, '/' + vals[0] + '_p0.' + vals[2]);
- } else if (!isRestricted && !rexe.test(vals[9])) {// use 480mw instead
- //GM_log("480mw");
- goodSlink = vals[9].replace(/mobile\//, '').replace(re, '/' + vals[0] + '.' + vals[2]);
- } else { //salvage from profile image
- //GM_log("salvage");
- re = /\/[0-9_]+\..*$/;
- goodSlink = vals[29].replace(/mobile\//, '').replace(/profile\//, 'img/').replace(re, '/' + imgID + '.' + vals[2]);
- }
- }
- slnk.href = goodSlink;
- slnk.title=vals[12];
- slnk.className = '_pxlazy _pxlazy_s _pxlazy_s_new';
- }
- }
- }
- }
- });
- }
- }
- var links = document.getElementsByTagName('a');
- var tagslink = /tags\.php\?tag=/;
- for (var i = 0; i < links.length; i++) {
- if (tagslink.test(links[i].href))
- links[i].href = links[i].href.replace("tags.php?tag=", "search.php?s_mode=s_tag_full&word=");
- }
- if (unsafeWindow.pixiv && unsafeWindow.pixiv.context.images) {
- var illustID = GetImageIDFromLink(unsafeWindow.pixiv.context.images[0]/*[0]*/);
- isNewManga = (illustID >= 11319936);
- //GM_log("illustID="+illustID);
- GM_xmlhttpRequest({
- url: 'http://spapi.pixiv.net/iphone/illust.php?' + sessID + (sessID ? '&' : '') + 'illust_id=' + illustID,
- method: "GET",
- headers: {
- Referer: "http://www.pixiv.net"
- },
- onload: function (response) {
- if (response.status == 200) {
- var vals = response.responseText.splitCSV();
- var rexe = /\/c\//;
- mangaFormat = vals[2];
- /*var vtxt = '';
- for(var x=0;x < vals.length;x++)
- vtxt=vtxt+x+':'+vals[x]+"\n";
- GM_log(vtxt);*/
- //GM_log("2nd");
- if (rexe.test(vals[9])) mangaFull();
- }
- }
- });
- var rexe = /\/c\//;
- //GM_log("isNewManga");
- //setTimeout(mangaFull,250);
- //GM_log("2nd");
- mangaFull();
- }
- }
- function mangaFull() {
- Items = document.getElementsByTagName('img');
- var rexe = /\/img-/;
- for (var x = 0; x < unsafeWindow.pixiv.context.images.length; x++) {
- if (isNewManga) {
- if(rexe.test(unsafeWindow.pixiv.context.images[x]))
- unsafeWindow.pixiv.context.images[x]/*[0]*/ = unsafeWindow.pixiv.context.images[x]/*[0]*/.replace(/c\/1200x1200\//, '').replace(/img-master/, 'img-original').replace(/_p(\d+).*(\.[a-zA-Z\?\d]+)$/, "_p$1."+mangaFormat);
- else
- unsafeWindow.pixiv.context.images[x]/*[0]*/ = unsafeWindow.pixiv.context.images[x]/*[0]*/.replace(/_p(\d+\.[a-zA-Z\?\d]+)$/, "_big_p$1");
- }
- preloadImg.push(new Image());
- preloadImg[preloadImg.length - 1].src = unsafeWindow.pixiv.context.images[x]/*[0]*/;
- }
- for (var x = 0; x < Items.length; x++) {
- var datasrc = Items[x].getAttribute("data-src");
- if (datasrc) {
- //GM_log("original-datasrc="+datasrc+" ,mangaFormat="+mangaFormat);
- if(rexe.test(datasrc))
- datasrc = datasrc.replace(/c\/1200x1200\//, '').replace(/img-master/, 'img-original').replace(/_p(\d+).*(\.[a-zA-Z\?\d]+)$/, "_p$1."+mangaFormat);
- else
- datasrc = datasrc.replace(/_p(\d+\.[a-zA-Z\?\d]+)$/, "_big_p$1");
- //GM_log("new-datasrc="+datasrc+" ,mangaFormat="+mangaFormat);
- }
- Items[x].setAttribute("data-src", datasrc);
- if (isNewManga) {
- //GM_log(x+".src="+Items[x].src);
- if(datasrc)
- Items[x].src = datasrc;
- else if(rexe.test(Items[x].src))
- Items[x].src = Items[x].src.replace(/c\/1200x1200\//, '').replace(/img-master/, 'img-original').replace(/_p(\d+).*(\.[a-zA-Z\?\d]+)$/, "_p$1$2");
- else
- Items[x].src = datasrc ? datasrc : Items[x].src.replace(/_p(\d+\.[a-zA-Z\?\d]+)$/, "_big_p$1");
- }
- }
- }
- window.addEventListener("load", pixivlink, true);