grafana html decode
当前为
// ==UserScript==
// @name grafana-html-decode
// @namespace http://tampermonkey.net/
// @version 0.9
// @description grafana html decode
// @author chong
// @include *://*.otr-devops.cn.svc.corpintra.net/*
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant none
// @license MIT
// ==/UserScript==
(function() {
'use strict';
// HTML解码函数
function decodeHTML(html) {
var txt = document.createElement('textarea');
txt.innerHTML = html;
return txt.value;
}
// 解码指定元素的内容
function decodeHTMLForElements(elements) {
elements.forEach(element => {
element.innerHTML = decodeHTML(element.innerHTML);
});
}
// 主解码逻辑
function decodeAll() {
// 解码所有具有特定类名的元素
const messageElements = document.querySelectorAll('.css-uev0p3-logs-row__message');
decodeHTMLForElements(messageElements);
// 解码所有表格单元格内容
const tableCells = document.querySelectorAll('.css-xdnfhu-logs-row-details-table');
decodeHTMLForElements(tableCells);
console.log('解码完成!');
}
// 动态添加解码按钮
function addDecodeButton() {
// 选择所有符合条件的 <button> 元素
const targetButtons = document.querySelectorAll('button.show-on-hover.css-pi41z0-toolbar-button-panel-menu[title="Menu"][data-testid*="Panel menu Logs"]');
targetButtons.forEach((targetButton) => {
// 检查是否已经添加过按钮
if (!targetButton.nextElementSibling || !targetButton.nextElementSibling.classList.contains('custom-decode-button')) {
// 创建新的按钮
const decodeButton = document.createElement('button');
decodeButton.className = 'custom-decode-button css-pi41z0-toolbar-button-panel-menu';
decodeButton.innerText = 'Decode';
decodeButton.title = 'Decode HTML entities';
decodeButton.onclick = decodeAll;
// 设置按钮样式,使其位于目标按钮的右边
decodeButton.style.marginLeft = '10px'; // 添加一些左边距
// 将按钮插入到目标按钮的右边
targetButton.parentNode.insertBefore(decodeButton, targetButton);
}
});
}
// 延迟1000毫秒后执行addDecodeButton函数
setTimeout(addDecodeButton, 1000);
})();