使用 Tampermonkey 更改网站的文本
Changing text of a website using Tampermonkey
所以基本上我想将 W 文本更改为 B。我下面的代码工作正常,但是当您刷新显示 W 文本然后将其替换为 B 的页面时会有延迟。我的第二个问题是每 20 次刷新左右,B 文本不会替换原始文本。有人可以帮助修复我的代码,这样它就不会犯这两个错误吗谢谢。
window.onload = function () {
/* Add your logic here */
var my_div = document.getElementsByClassName('c')[3]
my_div.firstChild.nodeValue = 'B'
}
onload
处理程序将 运行 一旦 页面上的所有 资源都已完成下载。在包含图像和外部脚本等的较大页面上,这可能需要一段时间,尤其是在连接不良的情况下。
附加一个 DOMContentLoaded
侦听器,一旦 DOM 结构被浏览器下载和解析,它就会 运行。
如果文档在用户脚本 运行 时可能已经是交互式的,那么不要附加监听器,只需 运行 立即更改文本的函数:
if (window.top === window) {
const fn = () => {
var my_div = document.getElementsByClassName('c')[3];
my_div.firstChild.nodeValue='B'
};
if (document.readyState === 'interactive' || document.readyState === 'complete') {
fn();
} else {
window.addEventListener('DOMContentLoaded', fn);
}
}
但是你link里面的文档很大,而且DOM解析的时间也很长,那么上面的可能不够快,这时候你可以附加一个MutationObserver到document 在 pageload 的开头(使用 @run-at document-start
和即时脚本注入),并在 document.getElementsByClassName('c')[3]
存在于文档中时立即更改它,如下所示:
// ==UserScript==
// @name New Userscript
// @include /^https://fork-accessuh-uh-edu-e3e0cca90dc751a6.sitemod.io/logout.phpsitemod/
// @run-at document-start
// ==/UserScript==
const cs = document.getElementsByClassName('c');
new MutationObserver((mutations, observer) => {
if (!cs[3]) {
return;
}
cs[3].firstChild.nodeValue='B'
observer.disconnect();
})
.observe(document.documentElement, { childList: true, subtree: true });
document-start
并不完全可靠,但有时需要 一些时间 来执行这样的脚本。如果您碰巧处于脚本不会立即 运行 的环境中,也可以通过 Tampermonkey 设置启用实验性即时脚本注入(配置模式:高级,滚动到最底部,注入模式:即时)。
所以基本上我想将 W 文本更改为 B。我下面的代码工作正常,但是当您刷新显示 W 文本然后将其替换为 B 的页面时会有延迟。我的第二个问题是每 20 次刷新左右,B 文本不会替换原始文本。有人可以帮助修复我的代码,这样它就不会犯这两个错误吗谢谢。
window.onload = function () {
/* Add your logic here */
var my_div = document.getElementsByClassName('c')[3]
my_div.firstChild.nodeValue = 'B'
}
onload
处理程序将 运行 一旦 页面上的所有 资源都已完成下载。在包含图像和外部脚本等的较大页面上,这可能需要一段时间,尤其是在连接不良的情况下。
附加一个 DOMContentLoaded
侦听器,一旦 DOM 结构被浏览器下载和解析,它就会 运行。
如果文档在用户脚本 运行 时可能已经是交互式的,那么不要附加监听器,只需 运行 立即更改文本的函数:
if (window.top === window) {
const fn = () => {
var my_div = document.getElementsByClassName('c')[3];
my_div.firstChild.nodeValue='B'
};
if (document.readyState === 'interactive' || document.readyState === 'complete') {
fn();
} else {
window.addEventListener('DOMContentLoaded', fn);
}
}
但是你link里面的文档很大,而且DOM解析的时间也很长,那么上面的可能不够快,这时候你可以附加一个MutationObserver到document 在 pageload 的开头(使用 @run-at document-start
和即时脚本注入),并在 document.getElementsByClassName('c')[3]
存在于文档中时立即更改它,如下所示:
// ==UserScript==
// @name New Userscript
// @include /^https://fork-accessuh-uh-edu-e3e0cca90dc751a6.sitemod.io/logout.phpsitemod/
// @run-at document-start
// ==/UserScript==
const cs = document.getElementsByClassName('c');
new MutationObserver((mutations, observer) => {
if (!cs[3]) {
return;
}
cs[3].firstChild.nodeValue='B'
observer.disconnect();
})
.observe(document.documentElement, { childList: true, subtree: true });
document-start
并不完全可靠,但有时需要 一些时间 来执行这样的脚本。如果您碰巧处于脚本不会立即 运行 的环境中,也可以通过 Tampermonkey 设置启用实验性即时脚本注入(配置模式:高级,滚动到最底部,注入模式:即时)。