在 Web 页面中直接显示图片,禁止延迟加载,一次性加载所有图片
当前为
// ==UserScript==
// @name 禁止 Web 延迟加载图片(一次性加载)
// @name:en Disable web lazy loading images (one-time loading)
// @description 在 Web 页面中直接显示图片,禁止延迟加载,一次性加载所有图片
// @description:en Display images directly on the web page, disable lazy loading, load all images at once.
// @version 0.8.4
// @author DUN
// @match *://*/*
// @grant none
// @run-at document-start
// @namespace https://greasyfork.org/users/662094
// ==/UserScript==
(function() {
'use strict';
function isExcluded(url) {
const excludedKeywords = [
];
return excludedKeywords.some(keyword => url.includes(keyword));
}
function getAbsoluteImageUrl(relativeOrAbsoluteUrl) {
if (relativeOrAbsoluteUrl.startsWith('http') || relativeOrAbsoluteUrl.startsWith('//')) {
return relativeOrAbsoluteUrl.startsWith('//') ? window.location.protocol + relativeOrAbsoluteUrl : relativeOrAbsoluteUrl;
} else {
const a = document.createElement('a');
a.href = relativeOrAbsoluteUrl;
return a.href;
}
}
function processSrcset(srcsetAttribute) {
return srcsetAttribute.split(',').map(srcsetPart => {
let [url, descriptor] = srcsetPart.trim().split(/\s+/);
url = getAbsoluteImageUrl(url);
return isExcluded(url) ? '' : `${url} ${descriptor}`;
}).filter(part => part).join(', ');
}
function updateImageSource(imgElement) {
var srcAttribute = imgElement.getAttribute("src")
|| imgElement.getAttribute("data-src")
|| imgElement.getAttribute("data-original");
const srcsetAttribute = imgElement.getAttribute("data-srcset");
if (srcAttribute && !isExcluded(srcAttribute)) {
imgElement.src = getAbsoluteImageUrl(srcAttribute);
}
if (srcsetAttribute) {
const processedSrcset = processSrcset(srcsetAttribute);
if (processedSrcset) {
imgElement.srcset = processedSrcset;
}
}
imgElement.removeAttribute('data-src');
imgElement.removeAttribute('data-srcset');
imgElement.removeAttribute('srcset');
imgElement.removeAttribute('sizes');
imgElement.classList.remove('lazyload', 'lazy');
}
const observer = new MutationObserver(mutations => {
mutations.forEach(mutation => {
if (mutation.type === 'attributes' && (mutation.attributeName === 'data-src' || mutation.attributeName === 'data-srcset')) {
updateImageSource(mutation.target);
} else if (mutation.type === 'childList' && mutation.addedNodes.length) {
mutation.addedNodes.forEach(node => {
if (node.tagName === 'IMG') {
updateImageSource(node);
} else if (node.querySelectorAll) {
node.querySelectorAll('img').forEach(updateImageSource);
}
});
}
});
});
observer.observe(document.documentElement, {
childList: true,
subtree: true,
attributes: true,
attributeFilter: ['data-src', 'data-srcset']
});
window.addEventListener('DOMContentLoaded', () => {
document.querySelectorAll('img').forEach(updateImageSource);
});
})();