虚空终端上传工具

虚空终端上传工具,添加按钮方便上传数据至虚空终端(https://xk.jdsha.com/)

目前為 2022-11-11 提交的版本,檢視 最新版本

// ==UserScript==
// @name         虚空终端上传工具
// @namespace    https://yinr.cc/
// @version      0.1.2
// @description  虚空终端上传工具,添加按钮方便上传数据至虚空终端(https://xk.jdsha.com/)
// @author       Yinr
// @license      MIT
// @icon         https://xk.jdsha.com/static/assets/media/logos/favicon.ico
// @match        http*://bbs.mihoyo.com/ys*
// @grant        GM_registerMenuCommand
// @grant        GM_addStyle
// @run-at       document-idle
// ==/UserScript==

(function() {
    'use strict';

    // javascript:(function(){const s=document.createElement('script');s.src='https://t1.jdsha.com/hoyo/xk.js';document.body.append(s)})();
    const upload = () => {
        const s = document.createElement('script')
        s.src='https://t1.jdsha.com/hoyo/xk.js'
        document.body.append(s)
    }

    // 加载菜单按钮
    const uploadCommandId = GM_registerMenuCommand(`上传数据`, () => upload())

    // 加载页面按钮
    const btnContainerSelector = 'div.header__avatarcontainer'
    const btnLogoutSelector = 'li.header__nav>span.header__logout'
    const addButton = () => {
        const container = document.querySelector(btnContainerSelector)

        const addBtnAct = mutationList => {
            if (document.querySelector('.header__uploadxk') !== null) return
            const logoutBtn = document.querySelector(btnLogoutSelector).parentElement

            debugger
            const btn = document.createElement('li')
            btn.classList.add('header__nav')
            btn.innerHTML = '<span class="header__navmore header__uploadxk">上传虚空</span>'
            // btn.onClick = upload
            btn.addEventListener('click', () => upload())
            logoutBtn.before(btn)

            GM_addStyle('.header__navitem--account .header__nav:nth-child(4) {  padding-bottom: 0px;  }')
            GM_addStyle('.header__navitem--account .header__nav:nth-child(5) {  padding-bottom: 10px;  }')
        }

        launchObserver({
            parentNode: container,
            selector: btnLogoutSelector,
            successCallback: addBtnAct,
            stopWhenSuccess: false,
        })
    }

    launchObserver({
        parentNode: document,
        selector: btnContainerSelector,
        successCallback: addButton,
    })

    // Utils
    function launchObserver({
        parentNode,
        selector,
        failCallback = null,
        successCallback = null,
        stopWhenSuccess = true,
        config = { childList: true, subtree: true }
    }) {
        if (!parentNode) return
        const observeFunc = mutationList => {
            if (!document.querySelector(selector)) {
                if (failCallback) failCallback()
                return
            }
            if (stopWhenSuccess) observer.disconnect()

            // 提供筛选变动节点并返回符合条件的元素数组的功能
            mutationList.itemFilter = (fn, type = 'addedNodes') => mutationList.map(i => Array.from(i[type]).filter(fn)).reduce((arr, val) => arr.concat(val), [])

            if (successCallback) successCallback(mutationList)
        }
        const observer = new MutationObserver(observeFunc)
        observer.observe(parentNode, config)
    }
})();

QingJ © 2025

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