问题是我有一个组件(不是我的代码,所以我无法改变它)调用document.title =""。当然我不会允许这样做,所以我的计划是覆盖document.title方法并检查一个空字符串。但是如何处理使用overriden方法设置document.title = Correct Title的调用。
到目前为止,这是我的代码:
var actualTitle = document.title;
Object.defineProperty(document, 'title', {
set: function (newValue) {
if(newValue != ""){
document.title = newValue;
}
},
get: function () {
return actualTitle;
}
});
此代码进行无限循环,因为该方法将其称为self。但我需要在set方法中设置标题。
我是否可以使用某种超级方法,例如Java。
答案 0 :(得分:0)
一个简单的旗帜会吗?
var actualTitle = document.title,
isModified = false;
Object.defineProperty(document, 'title', {
set: function (newValue) {
isModified = true;
if(newValue != "" && !isModified){
document.title = newValue;
}
},
get: function () {
return actualTitle;
}
});
答案 1 :(得分:0)
您可以通过使属性不可写(这是默认值)并为其提供您喜欢的值来停止修改标题:
function lockDocumentTitle() {
// extract the initial value
var actualTitle = document.title;
// override the property to always have that value
Object.defineProperty(document, 'title', {
value: actualTitle,
/*
By default:
- not enumerable
- not configurable
- not writable
*/
});
}
console.log(document.title); // ''
document.title = 'Test';
console.log('Set to ' + document.title); // 'Test'
lockDocumentTitle();
document.title = 'Something Else'; // no effect
console.log('Still ' + document.title); // its still 'Test'

答案 2 :(得分:0)
Object.defineProperty
工作原理:
当我使用document.title = "lorem ipsum dolor sit amet"
时,页面的标题在您使用document.getElementsByTagName("title")[0].innerHTML
时不会发生变化。所以,让我们破解它。
我们还有另一种更改标题的方法:document.getElementsByTagName("title")[0].innerHTML
。因此,每当document.title
的值发生变化时,我们都会更改document.title = ""
的值。但是你讨厌if(newValue != "")
所以让我们忽略<div id="loader">
<div id="loaderContent" >
<img src="/im/loader.gif" />
<p>Traitement en cours...</p>
</div>
</div>