66 lines
2.0 KiB
JavaScript
66 lines
2.0 KiB
JavaScript
// ==UserScript==
|
||
// @name TabName_in_ZephyrPlayer
|
||
// @namespace Violentmonkey Scripts
|
||
// @match https://jira.slife.fun/secure/Tests.jspa*
|
||
// @grant none
|
||
// @version 1.0
|
||
// @author -
|
||
// @description 17.09.2025, 17:12:31
|
||
// ==/UserScript==
|
||
|
||
// Ожидание элемента -- искомый элемент находится в h2.title
|
||
function waitForElm(selector) {
|
||
return new Promise(resolve => {
|
||
if (document.querySelector(selector)) {
|
||
return resolve(document.querySelector(selector));
|
||
}
|
||
|
||
const observer = new MutationObserver(mutations => {
|
||
if (document.querySelector(selector)) {
|
||
observer.disconnect();
|
||
resolve(document.querySelector(selector));
|
||
}
|
||
});
|
||
|
||
observer.observe(document.body, {
|
||
childList: true,
|
||
subtree: true
|
||
});
|
||
});
|
||
}
|
||
|
||
// ждём и немного логируем
|
||
waitForElm("h2").then((elm) => {
|
||
console.log("Element is ready");
|
||
console.log(elm.title);
|
||
}, 1000);
|
||
|
||
// Включаем наблюдателя по доке MutationObserver
|
||
var mutationObserver = new MutationObserver(function(mutations) {
|
||
mutations.forEach(function(mutation) {
|
||
|
||
// Получилась какая-то шляпа. Но иначе я не смог
|
||
if (mutation.type === 'attributes') {
|
||
const element = mutation.target;
|
||
const attributeName = mutation.attributeName;
|
||
const oldValue = mutation.oldValue;
|
||
const newValue = element.getAttribute(attributeName);
|
||
|
||
if (attributeName === 'title' && element.tagName === 'H2' ) {
|
||
document.title = newValue
|
||
}
|
||
|
||
}
|
||
});
|
||
});
|
||
|
||
// Наблюдаем за различными параметрами. Пытался определить какой именно нужный, чтобы меньше отслижвать - всё ломалось, поэтому отслеживаю всё.
|
||
mutationObserver.observe(document.documentElement, {
|
||
attributes: true,
|
||
characterData: true,
|
||
childList: true,
|
||
subtree: true,
|
||
attributeOldValue: true,
|
||
characterDataOldValue: true
|
||
});
|