esxi_web_cum

在 ESXi 虚拟机管理页面中展示所有虚拟机,并按名称排序,并在控制台输出排序前和排序后的表格内容,并将虚拟机列表高度设置为855px

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

You will need to install an extension such as Tampermonkey to install this script.

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         esxi_web_cum
// @license      MIT
// @namespace    http://tampermonkey.net/
// @version      1.3
// @description  在 ESXi 虚拟机管理页面中展示所有虚拟机,并按名称排序,并在控制台输出排序前和排序后的表格内容,并将虚拟机列表高度设置为855px
// @match        https://192.168.3.50/*
// ==/UserScript==

(function() {
    'use strict';

    // 检查表格数据是否加载完成
    const isTableDataLoaded = () => {
        const table = document.querySelector('table.k-selectable');
        return table && table.querySelectorAll('tbody tr').length > 0;
    };

    // 模拟点击箭头图标展开下拉菜单
    const triggerArrowheadClick = (observer) => {
        const arrowheadIcon = document.querySelector('span.k-icon.k-i-arrowhead-s');
        if (arrowheadIcon) {
            console.log("找到箭头图标,正在触发点击展开下拉菜单...");
            arrowheadIcon.click();
            observer.disconnect(); // 停止观察
            observeSortAscButton(); // 开始监听“按升序排序”按钮
        } else {
            console.log("未找到箭头图标。");
        }
    };

    // 模拟点击“按升序排序”图标
    const clickSortAscButton = () => {
        const sortAscButton = document.querySelector('span.k-sprite.k-i-sort-asc');
        if (sortAscButton) {
            console.log("找到 '按升序排序' 按钮,正在触发点击...");
            sortAscButton.click();
            // 排序完成后设置高度
            setTimeout(setContentHeight, 500); // 延迟 500 毫秒以确保排序完成
        } else {
            console.log("未找到 '按升序排序' 按钮。");
        }
    };

    const setContentHeight = () => {
        const gridContainer = document.querySelector('div.ui-resizable.k-grid.k-widget.k-reorderable.k-grid-scroll');
        const gridContent = document.querySelector('div.k-grid-content');

        if (gridContainer) {
            console.log("排序完成,强制设置gridContainer高度为855px...");
            gridContainer.style.setProperty("height", "855px", "important");

            if (gridContent) {
                const adjustedHeight = `${gridContainer.offsetHeight - 98}px`;
                console.log(`设置gridContent高度为: ${adjustedHeight}...`);
                gridContent.style.setProperty("height", adjustedHeight, "important");
            } else {
                console.log("未找到 'div.k-grid-content' 元素。");
            }
        } else {
            console.log("未找到 'div.ui-resizable.k-grid.k-widget.k-reorderable.k-grid-scroll' 元素。");
        }
    };

    // 使用 MutationObserver 监听“按升序排序”按钮的出现
    const observeSortAscButton = () => {
        const sortObserver = new MutationObserver(() => {
            if (document.querySelector('span.k-sprite.k-i-sort-asc')) {
                clickSortAscButton(); // 触发点击“按升序排序”按钮
                sortObserver.disconnect(); // 停止观察
            }
        });
        sortObserver.observe(document.body, { childList: true, subtree: true });
    };

    // 监听 DOM 变化,等待表格加载完成后点击箭头图标
    const observer = new MutationObserver(() => {
        if (isTableDataLoaded()) {
            console.log("表格数据已加载,尝试点击箭头图标...");
            triggerArrowheadClick(observer); // 数据加载后点击箭头图标
        }
    });

    // 开始观察整个文档的子节点变化
    observer.observe(document.body, { childList: true, subtree: true });
})();