在Firefox中看不到javascript对象属性

时间:2013-06-10 08:50:42

标签: javascript firefox

当我在Firefox(Firefox 20,Linux)中运行此功能时,我只看到{};{}

es.addEventListener('error', function(e){document.getElementById('debug').innerHTML+="ERR:"+JSON.stringify(e)+";"+JSON.stringify(es)+"<br/>";},false);

BTW,esEventSource个对象,eEvent个对象。

所以,我尝试了这个替代方案:

function objToString (obj) {
    var str = '';
    for (var p in obj) {
        if (obj.hasOwnProperty(p)) {
            str += p + '::' + obj[p] + '\n';
        }
    }
    return str;
}

//...

es.addEventListener('error', function(e){document.getElementById('debug').innerHTML+="ERR:"+objToString(e)+";"+objToString(es)+"<br/>";},false);

仍然没有得到任何输出。所以我尝试了这种方法,但仍然没有得到任何东西,无论是toString()还是key。 (toSource()也是一样。)

es.addEventListener('error', function(e){document.getElementById('debug').innerHTML+="ERR:"+e.toString()+";"+Object.keys(e).toString()+";"+es.toString()+";"+Object.keys(es).toString()+"<br/>";},false);

仍然没有。这似乎不公平,因为通过使用Firebug设置断点,我可以看到两个对象都有很多属性。然后我尝试在Chrome中,发现所有这三种技术都有效。这三个人也在Opera工作。

那么,Firefox发生了什么?查看内置对象的属性有一些限制吗?我可以通过设置一些Firefox属性来覆盖它的安全性吗?


注意:之前标记为重复(How to get error event details in Firefox using addEventListener?)的帖子是另一个问题。我可以在所有浏览器中访问e.typees.url等,包括Firefox。 Firefox的不同之处在于es.toString()返回一个空字符串,JSON.stringify看到一个空对象,Object.Keys(es)返回一个空数组等。

1 个答案:

答案 0 :(得分:1)

好的,从评论延伸:

因为在Firefox / Gecko中,许多与DOM相关的属性位于原型链中,而不是在对象实例的属性中(例如clientHeight中的Element.prototype,而不是在任何元素实例中),因此{{1将为false,obj.hasOwnProperty(p)将返回一个空数组。

比较

Object.keys

在Chrome中:

Object.getPrototypeOf(document.documentElement)

在Firefox中:

(列出普通第一级中的所有常量,属性,方法;哎呀,Firefox的本机控制台结果很难复制)。