Inline SVG Replacer

Replace all img tags with src as an SVG file into inline SVG tags

目前為 2024-01-12 提交的版本,檢視 最新版本

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Inline SVG Replacer
// @namespace    https://mkpo.li/
// @version      0.1.0
// @description  Replace all img tags with src as an SVG file into inline SVG tags
// @author       mkpoli
// @match        *://*/*
// @grant        none
// @license      CC0
// ==/UserScript==

(function() {
    'use strict';
    const isNonSvgImage = (img) => {
        const ext = img.src.split('.').pop();
        return ext && ['png', 'jpg', 'jpeg', 'gif', 'webp', 'bmp', 'ico', 'avif', 'apng', 'tiff', 'tif'].includes(ext);
    }
    const isSvgResponse = (response) => {
        const contentType = response.headers.get('Content-Type');
        return contentType && contentType.includes('image/svg+xml');
    };
    console.log("hello2")
    document.querySelectorAll('img').forEach(async img => {
        if (isNonSvgImage(img)) return;
        console.log("replacing", img)
        try {
            const response = await fetch(img.src);
            if (isSvgResponse(response)) {
                const svgText = await response.text();
                const parser = new DOMParser();
                const svgDoc = parser.parseFromString(svgText, "image/svg+xml");
                const inlineSvg = svgDoc.querySelector('svg');

                if (inlineSvg) {
                    Array.from(img.attributes).forEach(attr => {
                        inlineSvg.setAttribute(attr.name, attr.value);
                    });

                    img.replaceWith(inlineSvg);
                }
            }
        } catch (error) {
            console.error('Error inlining SVG:', error);
        }
    });
})();