覆盖文件.标题,然后使用原始方法
Override document.title, then use original method
问题是我有一个组件(这不是我的代码,所以我不能改变它)调用document.title="。当然我不允许这样做,所以我的计划是重写文档。方法并检查是否为空字符串。但是如何处理设置文档的调用呢?title =正确的标题,使用重写的方法。
下面是我的代码:var actualTitle = document.title;
Object.defineProperty(document, 'title', {
set: function (newValue) {
if(newValue != ""){
document.title = newValue;
}
},
get: function () {
return actualTitle;
}
});
这段代码产生了一个无限循环,因为该方法调用了self。但我需要在set方法中设置标题
有没有我可以使用的超级方法,就像你可以在Java中使用的。
Object.defineProperty(document, 'title', {
set: function (newValue) {
if(newValue != ""){
document.getElementsByTagName("title")[0].innerHTML = newValue;
}
},
get: function () {
return document.getElementsByTagName("title")[0].innerHTML;
}
});
工作原理:
当我使用Object.defineProperty
时,当你使用document.title = "lorem ipsum dolor sit amet"
时页面标题不会改变。所以,让我们破解它。
我们还有另一种方法来改变标题:document.getElementsByTagName("title")[0].innerHTML
。因此,每次改变document.title
的值,我们就改变document.getElementsByTagName("title")[0].innerHTML
的值。但是你讨厌document.title = ""
所以我们忽略if(newValue != "")
您可以通过简单地将属性设置为不可写(这是默认值),并为其指定您想要的值来停止修改标题:
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'
一个简单的标志行吗?
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;
}
});
相关文章:
- 我们可以用参数对象集合而不是原始数据来调用JavaScript collection.reduce()方法吗
- 在React中将方法从一个组件移动到另一个组件,并且仍然可以在原始组件中使用
- 当将函数传递给方法时,为什么使用匿名函数容器而不仅仅是原始函数有效
- 在原始对象的基础上创建新对象的最简单方法,但没有几个字段
- 有没有一种方法可以用javascript将原始html添加为新的表行
- 如何覆盖 Javascript 中的方法并将其应用于原始对象,而不是子对象
- 我将如何通过另一个方法来执行一个方法到原始的$(this)
- 如何在. CSS()方法后恢复到原始CSS值
- 创建一个方法来编辑原始数组,而不是返回一个新数组
- 链式方法调用对原始元素和克隆元素都不起作用,为什么?
- 属性返回原始值,而不是通过方法调用更新的值
- 恢复被mixin覆盖的原始lodash方法
- 覆盖文件.标题,然后使用原始方法
- 如果array .prototype.slice()方法返回浅拷贝,为什么改变切片数组的值不会改变原始数组
- Javascript:在方法内部调用方法本身(带原始参数)
- 对象/数组方法:修改原始的还是创建新的?指导方针
- 使用jQuery提交表单(json编码,ajax,解析原始url/方法)
- 谷歌图表:如何在可视化中替换数据表元素,但不在原始表中(DataView方法不起作用)
- 重写数组push时调用原始方法
- 原始字符串有方法