在javascript中为document.location创建钩子

时间:2012-04-18 05:18:20

标签: javascript

我们可以在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); 
}

1 个答案:

答案 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,许多浏览器还没有完全支持它。