您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
replace the meaningless VDI names
// ==UserScript== // @name citrix // @namespace http://tampermonkey.net/ // @version 0.5 // @description replace the meaningless VDI names // @author You // @match *.cloud.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=cloud.com // @grant none // @license MIT // ==/UserScript== let isSuccessful = false; let lastInnerDivs = ""; let lastDesktophostnames = ""; function concatStrs(strs) { let result = ""; for (let i = 0; i < strs.length; i++) { result += strs[i]; } return result; } (function () { 'use strict'; // Your code here... // wait until the page is loaded const change = (function () { // if (isSuccessful) return; // iterate all div elements with `tabindex` attribute, find the elements whose class pattern is "resourceInfo.*" const innerDivs = []; // loop until `innerDivs` are not empty const divs = document.querySelectorAll("div[tabindex]"); for (let i = 0; i < divs.length; i++) { const div = divs[i]; if (div.className.match('wsui-vpvk0d esg0job0')) { // find its child div element whose class patter is "child_.*" const childDivs = div.querySelectorAll("div"); for (let j = 0; j < childDivs.length; j++) { const childDiv = childDivs[j]; if (childDiv.className.match('wsui-tu8wqc efe0csw0')) { innerDivs.push(childDiv); } } } } if (lastInnerDivs !== concatStrs(innerDivs)) console.log(innerDivs); lastInnerDivs = concatStrs(innerDivs); // sleep a while // this function should not block the main thread if (innerDivs.length === 0) { setTimeout(change, 1000); return; } // find the key in local storage starting with "cacheBucket-resources" let value = ""; for (let i = 0; i < localStorage.length; i++) { const key = localStorage.key(i); if (key.match(/cacheBucket-resources.*/)) { value = localStorage.getItem(key); break; } } // parse value to JSON object const json = JSON.parse(value); const desktophostnames = {}; // iterate json.data.resources for (let i = 0; i < json.data.resources.length; i++) { const resource = json.data.resources[i]; desktophostnames[resource.id] = resource.desktophostname; } // replace "*SATX" with "Common VDI" for (const id in desktophostnames) { const desktophostname = desktophostnames[id]; if (desktophostname.match(/.*SATX.*/)) { desktophostnames[id] = "MUST login Citrix as dataai.service"; } } if (lastDesktophostnames !== JSON.stringify(desktophostnames)) console.log(desktophostnames); lastDesktophostnames = JSON.stringify(desktophostnames); // Find elements with data-testid starting with resource.id, then find their sibling with class "wsui-xd1djz e1kzv9or1" and update its innerHTML for (const id in desktophostnames) { const elements = document.querySelectorAll(`[data-testid^="${id}"]`); for (let i = 0; i < elements.length; i++) { const element = elements[i]; const siblings = element.parentNode.children; for (let j = 0; j < siblings.length; j++) { const sibling = siblings[j]; if (sibling.className === 'wsui-xd1djz e1kzv9or1') { sibling.innerHTML = desktophostnames[id]; break; } } } } isSuccessful = true; setTimeout(change, 1000) }); change(); // window.onload = change; })();