您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Shows the size of broken images
- // ==UserScript==
- // @name Dead Image Size Revealer
- // @namespace DoomTay
- // @description Shows the size of broken images
- // @include *
- // @version 1.0.0
- // @exclude *.svg
- // @grant none
- // ==/UserScript==
- var pics = document.images;
- function relativeToAbsolute(relativeURL)
- {
- var testLink = document.createElement("A");
- testLink.href = relativeURL;
- return testLink.href;
- }
- function addSize(pic) {
- if(pic && pic.src && !getDivSign(pic))
- {
- var offset = getOffset(pic);
- var sizeDiv = document.createElement("div");
- sizeDiv.innerHTML = pic.width + " x " + pic.height;
- sizeDiv.className = "imageSize";
- var bindingClass = randomString();
- sizeDiv.classList.add(bindingClass);
- pic.classList.add(bindingClass);
- pic.parentNode.insertBefore(sizeDiv, pic.nextSibling);
- sizeDiv.style.left = Math.round(offset.left) + "px";
- sizeDiv.style.top = Math.round(offset.top) + "px";
- }
- }
- var sizeDivStyle = document.createElement("style");
- sizeDivStyle.type = "text/css";
- sizeDivStyle.innerHTML = ".imageSize { background-color:#333; color: white; position: absolute; font-family: Arial; font-size: 12px; font-weight:normal }";
- document.head.appendChild(sizeDivStyle);
- for(var i = 0; i < pics.length; i++)
- {
- if(window.getComputedStyle(pics[i]) && window.getComputedStyle(pics[i]).width != "auto" && pics[i].width > 40 && pics[i].height > 15)
- {
- if(pics[i].complete && pics[i].naturalWidth == 0) addSize(pics[i]);
- pics[i].addEventListener("load", e => {
- if(getDivSign(e.target))
- {
- var divToRemove = getDivSign(e.target);
- divToRemove.parentNode.removeChild(divToRemove);
- e.target.className = e.target.className.substring(0,e.target.className.length - 6);
- }
- }, true);
- pics[i].addEventListener("error", e => { addSize(e.target); }, true);
- }
- }
- function randomString()
- {
- var string = "";
- for(var i = 0; i < 5; i++)
- {
- string += String.fromCharCode(Math.random() * 26 + 97);
- }
- return string;
- }
- function getDivSign(image)
- {
- for(var c = 0; c < image.classList.length; c++)
- {
- var possibleDiv = image.parentNode.querySelector("div." + image.classList[c]);
- if(possibleDiv) return possibleDiv;
- }
- return null;
- }
- function getOffset(element)
- {
- var elementCoords = element.getBoundingClientRect();
- var positioningParent = getPositioningElement(element);
- if(positioningParent != null)
- {
- var parentCoords = positioningParent.getBoundingClientRect();
- var left = elementCoords.left - parentCoords.left;
- var top = elementCoords.top - parentCoords.top;
- //var left = elementCoords.left;
- //var top = elementCoords.top;
- }
- else
- {
- var left = elementCoords.left + window.scrollX;
- var top = elementCoords.top + window.scrollY;
- }
- return {left:left, top:top};
- }
- function getPositioningElement(start)
- {
- var startingPoint = start.parentNode;
- while(startingPoint != document.body)
- {
- if(window.getComputedStyle(startingPoint).position == "relative" && window.getComputedStyle(startingPoint).position != "absolute") return startingPoint;
- startingPoint = startingPoint.parentNode;
- }
- return null;
- }
- var observer = new MutationObserver(function(mutations) {
- mutations.forEach(function(mutation) {
- var sizeDivs = document.querySelectorAll(".imageSize");
- observer.disconnect();
- Array.prototype.forEach.call(sizeDivs,
- div => {
- var offset = getOffset(document.querySelector("img." + div.classList[1]));
- if(div.style.left != Math.round(offset.left) + "px") div.style.left = Math.round(offset.left) + "px";
- if(div.style.top != Math.round(offset.top) + "px") div.style.top = Math.round(offset.top) + "px";
- }
- );
- observer.observe(document.body, config);
- if(mutation.target.nodeName == "IMG" && mutation.attributeName == "src" && getDivSign(mutation.target))
- {
- var divToRemove = getDivSign(mutation.target);
- divToRemove.parentNode.removeChild(divToRemove);
- mutation.target.className = mutation.target.className.substring(0,mutation.target.className.length - 6);
- }
- });
- });
- var config = { attributes: true, subtree: true, childList: true, attributeOldValue: true };
- observer.observe(document.body, config);