Blogger主题https://wsrv.nl/?url=代理图片V2版

person 元章 event 2026-07-30 local_offer 代码
        优化后的版本主要改进了以下几点:
        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>

copyright 版权声明

相关文章