替换 Pixiv 的图片为高画质原图
当前为
// ==UserScript==
// @name Pixiv Replace With Original
// @name:zh-TW Pixiv 替換為高畫質原圖
// @name:zh-CN Pixiv 替换为高画质原图
// @namespace https://blog.maple3142.net/
// @version 0.2
// @description Replace Pixiv image with original image
// @description:zh-TW 替換 Pixiv 的圖片為高畫質原圖
// @description:zh-CN 替换 Pixiv 的图片为高画质原图
// @author maple3142
// @match https://www.pixiv.net/member_illust.php?mode=medium&illust_id=*
// @match https://www.pixiv.net/member_illust.php?mode=manga&illust_id=*
// @run-at document-start
// @grant unsafeWindow
// @compatible firefox >=52
// @compatible chrome >=55
// @license MIT
// ==/UserScript==
;(function() {
'use strict'
const $ = s => document.querySelector(s)
const $$ = s => [...document.querySelectorAll(s)]
const params = new URLSearchParams(location.search)
const mode = params.get('mode')
if (mode === 'medium') {
const PREFIX = Math.random().toString(36)
Object.defineProperty(Object.prototype, 'props', {
set(v) {
this[PREFIX + '_props'] = v
if (v.urls) onTarget(this)
},
get(v) {
return this[PREFIX + '_props']
}
})
function onTarget(target) {
const url = target.props.urls.original
target.props.urls = new Proxy(
{},
{
get: () => url
}
)
}
} else if (mode === 'manga') {
const id = params.get('illust_id')
const p = fetch(`/ajax/illust/${id}`, { credentials: 'same-origin' })
.then(r => r.json())
.then(r => r.body)
.then(data => {
const url = data.urls.original
const ar = []
for (let i = 0; i < data.pageCount; i++) {
ar.push(url.replace('p0', `p${i}`))
}
return ar
})
addEventListener('load', () => {
p.then(ar => {
const imgs = $$('img.image')
for (let i = 0; i < ar.length; i++) {
imgs[i].src = imgs[i].dataset.src = ar[i]
}
})
})
}
})()