try to take over the world!
当前为
// ==UserScript==
// @name Sankaku Previewer
// @namespace https://greasyfork.org/ja/scripts/370717-sankaku-previewer
// @version 1.0
// @description try to take over the world!
// @author You
// @match https://chan.sankakucomplex.com/*
// @grant GM_xmlhttpRequest
// ==/UserScript==
(function() {
const body = document.getElementsByTagName('body')[0]
createPreview()
addEvent()
body.onmousemove = () => { addEvent() }
function xpath(path, d){
if(!d) d = document
return document.evaluate(path, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)
}
let timer
function addEvent() {
const nodes = xpath("//div[@class='content']//img[not(contains(@preview, 'true'))]")
for(let i = 0; i < nodes.snapshotLength; i++){
const imgEle = nodes.snapshotItem(i)
imgEle.setAttribute('flag', '0')
imgEle.onmouseover = () => {
imgEle.setAttribute('flag', '0')
const parent = imgEle.parentNode
const req = new GM_xmlhttpRequest({
method: "GET",
url: parent.href,
responseType: 'text',
onload: (res) => {
const raw_xml = res.response
const parser = new DOMParser()
const html = parser.parseFromString(raw_xml, "text/html")
const img = html.getElementById('lowres') || html.getElementById('highres')
const blob_req = new GM_xmlhttpRequest({
method: "GET",
url: img.href,
responseType: 'blob',
onload: (res) => {
if (imgEle.getAttribute('flag') != 0) return
const img_src = window.URL.createObjectURL(res.response)
openPreview(img_src)
}
})
}
})
}
imgEle.onmouseout = () => {
imgEle.setAttribute('flag', '1')
closePreview()
}
imgEle.setAttribute('preview', 'true')
}
}
function createPreview() {
const preview = document.createElement('img')
const content = document.getElementById('content')
preview.setAttribute('id', 'sankaku-preview')
preview.height = document.documentElement.clientHeight
preview.style.pointerEvents = 'none'
preview.style.zIndex = '10001'
preview.style.opacity = '0.9'
preview.style.left = '0px'
preview.style.top = '0px'
preview.style.position = 'fixed'
preview.style.display = 'none'
content.appendChild(preview)
}
function openPreview(src) {
const preview = document.getElementById('sankaku-preview')
preview.setAttribute('src', src)
preview.style.display = 'inline'
}
function closePreview() {
const preview = document.getElementById('sankaku-preview')
preview.style.display = 'none'
}
})();