Greasy Fork is available in English.
修改电子票姓名、生日、期满日期(主页/详情页/我的信息页不卡顿无闪烁)
// ==UserScript==
// @name XU XIANLAN
// @namespace http://tampermonkey.net/
// @version 2.0
// @description 修改电子票姓名、生日、期满日期(主页/详情页/我的信息页不卡顿无闪烁)
// @author You
// @match *://*.interpark.com/*
// @match *://*/*
// @match *://*.interparkglobal.com/*
// @match *://m.interpark.com/*
// @match *://m.interparkglobal.com/*
// @match *://*.nol.com/*
// @icon https://interpark.com/favicon.ico
// @license MIT
// @grant none
// @run-at document-start
// ==/UserScript==
(function () {
'use strict';
const OLD_NAME = "CHEN HUANTING";
const NEW_NAME = "XU XIANLAN";
const NEW_BIRTHDAY = "(**1111)";
const NEW_EXPIRE_DATE = "2028-08-21";
const DATE_RE = /\d{4}-\d{2}-\d{2}/g;
function replaceInHome() {
document.querySelectorAll("div.mbs_4").forEach(el => {
let html = el.innerHTML;
let changed = false;
if (html.includes(OLD_NAME)) {
html = html.replaceAll(OLD_NAME, NEW_NAME);
changed = true;
}
if (el.textContent.includes("期满") && DATE_RE.test(html)) {
html = html.replace(DATE_RE, NEW_EXPIRE_DATE);
changed = true;
}
if (changed) el.innerHTML = html;
});
}
function replaceInTicketDetail() {
document.querySelectorAll("li, span, div, h2, h3").forEach(el => {
let txt = el.textContent.trim();
if (!txt) return;
// 改名字
if (txt === OLD_NAME) {
el.textContent = NEW_NAME;
}
// 改生日
if (/^\(\*\*\d{4}\)$/.test(txt)) {
el.textContent = NEW_BIRTHDAY;
}
});
}
function replaceInMyInfoNode(node) {
if (node.nodeType !== 1) return; // 只处理元素节点
// 如果是 <dt> 并且内容是“预订者姓名”
if (node.tagName.toLowerCase() === 'dt' && node.textContent.includes("预订者姓名")) {
const dd = node.nextElementSibling;
if (dd && dd.tagName.toLowerCase() === 'dd') {
if (dd.textContent.includes(OLD_NAME)) {
dd.textContent = dd.textContent.replace(OLD_NAME, NEW_NAME);
}
}
}
if (node.tagName && node.tagName.toLowerCase() === 'dd' && node.textContent.includes(OLD_NAME)) {
node.textContent = node.textContent.replace(OLD_NAME, NEW_NAME);
}
}
function replaceInMyInfo() {
document.querySelectorAll('dt').forEach(dt => {
if (dt.textContent.includes("预订者姓名")) {
const dd = dt.nextElementSibling;
if (dd && dd.tagName.toLowerCase() === 'dd' && dd.textContent.includes(OLD_NAME)) {
dd.textContent = dd.textContent.replace(OLD_NAME, NEW_NAME);
}
}
});
}
function run() {
const url = location.href;
if (/\/my-info\/reservations\//.test(url)) {
replaceInMyInfo();
} else if (/\/tickets\.interpark\.com\/mt\/detail/.test(url)) {
replaceInTicketDetail();
} else {
replaceInHome();
}
}
let timer = null;
const observer = new MutationObserver(mutations => {
mutations.forEach(mutation => {
mutation.addedNodes.forEach(node => {
if (/\/my-info\/reservations\//.test(location.href)) {
replaceInMyInfoNode(node);
}
});
});
if (timer) clearTimeout(timer);
timer = setTimeout(run, 50);
});
observer.observe(document.documentElement, { childList: true, subtree: true });
// 初始运行一次
run();
})();