iconfont 免登录下载

免登录下载 iconfont 的icon

// ==UserScript==
// @name         iconfont 免登录下载
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  免登录下载 iconfont 的icon
// @author       You
// @match        https://www.iconfont.cn/collections/*
// @match        https://www.iconfont.cn/search/*
// @icon         https://www.google.com/s2/favicons?domain=iconfont.cn
// @grant        none
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/jszip.min.js
// ==/UserScript==

(function () {
    'use strict';

    async function sleep(time) {
        return new Promise(function (resolve) {
            setTimeout(resolve, time);
        })
    }

    async function run() {
        let $div = document.querySelector(".block-bar-right .block-radius-btn-group.clearfix");
        if (!$div || $div.querySelector('.icon-xiazai')) {
            return;
        }
        let $icon = document.createElement("span");
        $icon.setAttribute('class', 'radius-btn radius-btn-like');
        $icon.innerHTML = ('<span class="icon-xiazai  iconfont"></span>')
        $div.prepend($icon);
        $icon.addEventListener('click', function () {
            var zip = new JSZip();
            Array.from(document.body.querySelectorAll('.icon-twrap')).map(function (icon) {
                let svg = icon.innerHTML;
                let name = icon.nextElementSibling.innerText
                zip.file("icons/" + name + ".svg", svg);
            })
            zip.generateAsync({type: "blob"}).then(content => {
                let $a = document.createElement("a");
                let $title = document.body.querySelector(".right-content span.title");
                $a.href = URL.createObjectURL(content);
                $a.download = ($title ? $title.innerText : 'icon') + ".zip";
                $a.click();
            })
        });
    }

    new Promise(async function () {
        while (true) {
            await sleep(1000);
            console.log("run")
            await run();
            Array.from(document.querySelectorAll('span.icon-xiazai[data-login]')).forEach(e => {
                e.removeAttribute("data-login");
            });
        }
    }).finally()
    // Your code here...
})();