// ==UserScript== // @name Pixiv raw image 403 Forbidden Fix // @namespace https://blog.maple3142.net/ // @version 0.2 // @description Fix Pixiv raw image 403 // @author maple3142 // @match https://i.pximg.net/* // @grant GM_xmlhttpRequest // @grant GM_setValue // @grant GM_getValue // @downloadURL none // ==/UserScript== (function() { 'use strict' const params=new URLSearchParams(location.search) const removeAllChild=el=>{ while(el.firstChild)el.removeChild(el.firstChild) } function download(url,name=true){ const a=document.createElement('a') a.href=url a.download=name document.body.appendChild(a) a.click() a.remove() } if(document.title==='403 Forbidden'){ const fname=location.pathname.split('/').slice(-1)[0] removeAllChild(document.body) document.title='Loading image...' document.body.style.textAlign='center' const msg=document.createElement('h1') msg.textContent='Loading' msg.style.padding='0px' msg.style.margin='0px' document.body.appendChild(msg) const origlink=document.createElement('a') origlink.textContent='Original Link' origlink.href=`https://www.pixiv.net/member_illust.php?mode=medium&illust_id=${/(\d+)/.exec(fname)[1]}` origlink.target='_blank' origlink.style.display='block' origlink.style.padding='0px' origlink.style.margin='0px' document.body.appendChild(origlink) GM_xmlhttpRequest({ method: 'GET', url: location.href, headers: { Referer: `https://www.pixiv.net/` }, responseType: 'blob', onload: xhr=>{ console.log(xhr.response) const blob=xhr.response const url=URL.createObjectURL(blob) const img=new Image() img.src=url msg.replaceWith(img) img.oncontextmenu=e=>{ e.preventDefault() if(confirm('Download Image?')){ download(url,fname) } } document.title=fname }, onerror: e=>{ msg.textContent='Load failed.' } }) } })()