我们可以在javascript中创建对document.location属性的引用。从过去几天开始,我们正在处理在document.createElement上创建的钩子。在使用它时,我们怀疑是否可以在诸如document.location,document.scripts等对象上创建一个钩子。
var dbi = document.body.innerHTML;
document.body.innerHTML=function () {
var elem = dbi.apply (document, arguments);
console.log(arguments);
}
答案 0 :(得分:3)
在您的代码中:
> var dbi = document.body.innerHTML;
innerHTML
是一个属性,其值是一个字符串,因此分配给dbi的值是一个字符串原语。
> document.body.innerHTML=function () {
body元素是宿主对象,没有理由相信你可以将一个函数对象分配给一个属性,根据相关标准,该属性应该是一个字符串。在某些环境中可能有可能,但它不能依赖,并且至少在某些使用的浏览器中会失败。
> var elem = dbi.apply (document, arguments);
dbi
是一个字符串原语,它没有apply方法。
> console.log(arguments);
> }
在ES5中,您可以定义getter,例如
var o = {
get pageURI () {
return document.location.href;
}
}
所以你可以这样做:
alert(o.pageURI);
document.location = document.location.href + '#foo';
alert(o.pageURI); // current URI with #foo appended
但你不应该依赖普通网络上的ES5,许多浏览器还没有完全支持它。