您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
用于进行配置系统apollo的Key的快速搜索和定位
// ==UserScript== // @name ApolloConfigSearch // @namespace https://apollo.com/ // @version 0.3 // @description 用于进行配置系统apollo的Key的快速搜索和定位 // @author AustinYoung // @match https://*/config.html // @grant unsafeWindow // @license MIT // ==/UserScript== // 用于进行appllo系统的 Key内容的快速搜索和定位 // 支持用空格分割关键字对输入内容进行“与”方式搜索 // 全局变量保存基础信息 var CurrIndex = 0; // 当前查询到的位置 var ArrlIndex = []; // 总共的位置集合 let PreObj = null; // 前一个获取对象 let PreSearchKey = ''; // 前一个获取对象 var ArrObj = []; // 文字和td对象数组 // 全局变量结束 (function () { 'use strict'; addButton() // Your code here... })(); // 返回表格中每一行中 Key的内容,形成数组 function getKeys(objTrs, index) { //let text,obj; let objArr = [] objTrs.forEach(x => { let obj = x.querySelector('td:nth-child(' + (index + 1) + ')') if (obj == null) { return; } let txt = obj.innerText.toLowerCase(); // 无视大小写 objArr.push({ obj, txt }) }) return objArr; } function addButton() { var strControlHTML = ` <div style="padding:2px;position:fixed;top:40px;left:2px;z-index:99999" id="myselfFloat"> <div style="background-color:rgb(208, 227, 245);opacity: 0.8;"> <span style="cursor:pointer;" onclick="showList()">🔎</span> <span id="searchBar"> <input id="mySearchKey" size="20" placeholder="请输入回车搜索Key 可空格分割多条件"/> <span style="cursor:pointer;" id="btPre">▲</span> <span style="cursor:pointer;" id="btNext">▼</span> <span id="searchHint"></span> </span> </div> </div> `; var oNode = document.createElement('div'); oNode.innerHTML = strControlHTML; document.body.append(oNode); setTimeout( function(){ getAllKeys() btPre.onclick= function(){ doSearch(-1) return false } btNext.onclick= function(){ doSearch(1) return false } mySearchKey.onkeypress = function(){ doSearch(window.event) } },1) } unsafeWindow.showList = function () { searchBar.style.display = searchBar.style.display == '' ? 'none' : '' } function doSearch(e) { if (e.keyCode == 13) { // 默认为往下收缩 e = 1 } // 只有当e不是事件时才执行搜索 if (e.keyCode == null) { // 获取输入内容 let currKeys = mySearchKey.value.trim(); // 不输入内容,则表示清空 if(currKeys =='') { CurrIndex = 0; ArrlIndex = []; showHint('请输入内容!','red') return; } if (currKeys != PreSearchKey) { // 重新搜索 searchTxt(currKeys) PreSearchKey = currKeys; } if (e == 1) { //console.log('doSearch') searchFocus(e) } else if (e == -1) { //console.log('doSearch back') searchFocus(e) } } } function getAllKeys() { if (ArrObj.length > 0) { //console.log('getAllKeys.len:',getAllKeys.length) return; } var allTableDiv = document.querySelectorAll('.namespace-view-table table') allTableDiv.forEach(x => { // 要获取判断第几列是 Key if (x.className.indexOf('hide') > -1) { return } let ths = Array.from(x.querySelectorAll('th')) let keyCol = 2; // 默认第二列 ths.find((v, i) => { let txt = v.innerText; if (txt.indexOf('Key') > -1) { keyCol = i; return true; } }) ArrObj.push(...getKeys(x.querySelectorAll('tr'), keyCol)) }) //console.log("getAllKeys ",ArrObj) } // 搜索内容并复位相关标记 function searchTxt(keyword) { if (ArrObj.length == 0) { getAllKeys(); } CurrIndex = 0; ArrlIndex = []; // 无视大小写 let arrKey=keyword.toLowerCase().split(/\s+/); ArrObj.forEach((x, i) => { // 核心搜索 let hasFound = arrKey.every(y=>{ return (x.txt.indexOf(y) > -1) }) if (hasFound) { ArrlIndex.push(i) } }) // console.log(ArrlIndex) } // 根据当前搜索内容,定位到需要的位置 function searchFocus(flag) { let curr = CurrIndex curr += flag let extHint = '' let color = 'blue' if (curr < 0) { extHint = '到达顶部,从尾部开始' curr = ArrlIndex.length - 1 } else if (curr >= ArrlIndex.length) { extHint = '到达尾部,从头开始' curr = 0 } // 在范围以内 CurrIndex = curr // 清除上次的标记 if (PreObj != null) { PreObj.style.borderColor = '' } let realIndex = ArrlIndex[CurrIndex] if(ArrlIndex.length==0) { extHint ='未搜索到任何信息!' showHint(extHint,'Magenta') return; } let realObj = ArrObj[realIndex] if(realObj==null){ extHint ='对象不存在!' color = 'red' }else{ showFocus(realObj.obj) } showHint(extHint,color) } // 显示提示信息 function showHint(txt,color) { searchHint.innerHTML = `当前${CurrIndex+1}/${ArrlIndex.length} <span style="color:${color}">${txt}<span>` } // 高亮搜索到的内容并滚动到当前 function showFocus(obj) { //console.log(obj) obj.style.borderColor = 'red' obj.scrollIntoView({ behavior: "instant", block: "center", inline: "nearest" }) PreObj = obj; }