
1.支持懒加载(Lazy Load):优先捕获 Blogger 主题中常用的 data-src 或 data-original 真实图片地址,避免误把占位符(如 Base64 格式)拿去代理。
2.过滤无效协议:自动跳过 data:、blob: 等非网络图片链接。
3.性能优化:弃用了高频消耗 CPU 的 setInterval(..., 100),改用现代浏览器高效的MutationObserver,能够实时、零延迟地捕捉动态加载的新图片。
优化后的 Blogger 专用代码:
将以下代码完整复制并放置到 Blogger 后台的 主题 -> 编辑 HTML 中的 <body> 标签底部(或 </body> 之前):
代码展示
<script>
// <![CDATA[
(function() {
function processImage(img) {
if (img.getAttribute('data-proxied') === 'true') return;
var realSrc = img.getAttribute('data-src') || img.getAttribute('data-original') || img.src;
if (realSrc && !realSrc.includes('wsrv.nl') && !realSrc.startsWith('data:') && !realSrc.startsWith('blob:')) {
var proxiedUrl = 'https://wsrv.nl/?url=' + encodeURIComponent(realSrc) + '&af';
if (img.hasAttribute('data-src')) {
img.setAttribute('data-src', proxiedUrl);
}
if (img.hasAttribute('data-original')) {
img.setAttribute('data-original', proxiedUrl);
}
img.src = proxiedUrl;
img.setAttribute('data-proxied', 'true');
}
}
function forceProxyImages() {
var images = document.getElementsByTagName('img');
for (var i = 0; i < images.length; i++) {
processImage(images[i]);
}
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', forceProxyImages);
} else {
forceProxyImages();
}
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (mutation.addedNodes && mutation.addedNodes.length > 0) {
for (var i = 0; i < mutation.addedNodes.length; i++) {
var node = mutation.addedNodes[i];
if (node.nodeType === 1) {
if (node.tagName === 'IMG') {
processImage(node);
}
var subImages = node.getElementsByTagName('img');
for (var j = 0; j < subImages.length; j++) {
processImage(subImages[j]);
}
}
}
}
if (mutation.type === 'attributes' && mutation.target.tagName === 'IMG') {
processImage(mutation.target);
}
});
});
observer.observe(document.documentElement, {
childList: true,
subtree: true,
attributes: true,
attributeFilter: ['src', 'data-src', 'data-original']
});
})();
// ]]>
</script>