SingleFile - 单文件保存网页

try to take over the world!

目前為 2021-01-07 提交的版本,檢視 最新版本

// ==UserScript==
// @name         SingleFile - 单文件保存网页
// @namespace    SingleFile
// @version      0.1
// @description  try to take over the world!
// @author       PY-DNG
// @include      *
// @grant        GM_xmlhttpRequest
// ==/UserScript==

(function() {
    'use strict';

    // User Swiches
    const developer = true;

    // variants
    let i, j;

    // Get HTML
    const HTML_ORGINAL = document.lastChild.outerHTML;
    let HTML = HTML_ORGINAL;
    /*let HTMLDoc = new Document();
    HTMLDoc.open();
    HTMLDoc.write(HTML);*/
    if (developer) {console.log('HTML_ORGINAL', HTML_ORGINAL, HTML);};

    // Remove <script>s
    const scripts = document.querySelectorAll('script');
    for (i = 0; i < scripts.length; i++) {
        HTML = HTML.replace(scripts[i].outerHTML, '');
    }
    //HTML = HTML.replaceAll(/\r?\n?<script.*?>[\s\S]*?<\/script>/g, '');
    if (developer) {console.log('<script> DEALED', HTML, scripts);};

    // Deal CSS <link>s
    let CSSs = {loaded: [], style: []};
    let CSSLinks = document.querySelectorAll('link[rel="stylesheet"]');
    for (i = 0; i < CSSLinks.length; i++) {
        CSSs.loaded[i] = null;
        getCSSFromLink(CSSLinks, CSSs, i);
    }
    //while(CSSs.loaded.includes(null)) {};
    //if (developer) {console.log('CSS DEALED', HTML, CSSs);};

    function getCSSFromLink(CSSLinks, CSSs, index) {
        GM_xmlhttpRequest({
            method: 'GET',
            url: CSSLinks[index].href,
            responseType: 'text',
            onload: function(re) {
                if (re.readyState === 4) {
                    // request success
                    CSSs.loaded[index] = true;
                    CSSs.style[index] = re.responseText;
                    HTML = HTML.replaceAll(CSSLinks[index].outerHTML, '<style>' + CSSs.style[index] + '</style>');
                    if (developer) {console.log('CSS DEALED', [HTML, CSSs]);};
                } else {
                    // request failed
                    console.log('XMLHttpRequest get CSS error:', CSSLinks, CSSs, index, re);
                    if (developer) {debugger};
                    CSSs.loaded[index] = false;
                }
            },
            onabort : function() {CSSs.loaded[index] = false;}
        })
        console.log('request', index, CSSLinks);
    }

    function getBASE64FromPic(img) {
        if (typeof(img) === 'string') {
            //
        }
    }
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址