只有在我没有更改的情况下才替换文档标题
Replace document title only if not changed by me
我知道这是个奇怪的话题。
我想更改 document.title
只有页面(不是我的代码)已更改它。
所以我有一个观察者看标题:
var target = document.querySelector('head > title');
var observer = new window.WebKitMutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
// console.log('new title:', mutation.target.textContent);
// Here call my function to replace the title with mine
// But don't call that function if the title has been changed by me
});
});
observer.observe(target, { subtree: true, characterData: true, childList: true });
然后我可以看到每个新值。问题是,当标题是新标题时,我想用我的自定义值替换它。而且我不知道如何避免无限循环。
考虑这个过程:
- Twitter/GitHub/Gmail等动态网站正在更改标题“(1)新邮件”。
- 我的功能是用“[Gmail] (1) 新邮件”替换标题。但是我不想触发无限循环。
- Twitter/GitHub/Gmail等动态网站正在更改标题“(2)新邮件”。
- 我的功能是将标题替换为“[Gmail] (2) 新邮件”。但是我不想触发无限循环。
如果我理解你的问题,你的页面标题有两种状态:
- 由页面更改
- 由你改变
一种解决方案是存储该状态并在您的观察者中使用它。
例如,您可以使用全局变量:
var changedByMe = false;
var observer = new window.WebKitMutationObserver(function(mutations) {
if (changedByMe) {
changedByMe = false;
} else {
mutations.forEach(function(mutation) {
// your code
changedByMe = false;
});
}
});
我知道这是个奇怪的话题。
我想更改 document.title
只有页面(不是我的代码)已更改它。
所以我有一个观察者看标题:
var target = document.querySelector('head > title');
var observer = new window.WebKitMutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
// console.log('new title:', mutation.target.textContent);
// Here call my function to replace the title with mine
// But don't call that function if the title has been changed by me
});
});
observer.observe(target, { subtree: true, characterData: true, childList: true });
然后我可以看到每个新值。问题是,当标题是新标题时,我想用我的自定义值替换它。而且我不知道如何避免无限循环。
考虑这个过程:
- Twitter/GitHub/Gmail等动态网站正在更改标题“(1)新邮件”。
- 我的功能是用“[Gmail] (1) 新邮件”替换标题。但是我不想触发无限循环。
- Twitter/GitHub/Gmail等动态网站正在更改标题“(2)新邮件”。
- 我的功能是将标题替换为“[Gmail] (2) 新邮件”。但是我不想触发无限循环。
如果我理解你的问题,你的页面标题有两种状态:
- 由页面更改
- 由你改变
一种解决方案是存储该状态并在您的观察者中使用它。 例如,您可以使用全局变量:
var changedByMe = false;
var observer = new window.WebKitMutationObserver(function(mutations) {
if (changedByMe) {
changedByMe = false;
} else {
mutations.forEach(function(mutation) {
// your code
changedByMe = false;
});
}
});