当我在 Firefox(Firefox 20、Linux)中运行此功能时,我只看到{};{}
:
es.addEventListener('error', function(e){document.getElementById('debug').innerHTML+="ERR:"+JSON.stringify(e)+";"+JSON.stringify(es)+"<br/>";},false);
顺便说一句,es
是一个EventSource
对象,并且e
是一个Event
对象。
所以,我尝试了这个替代方案:
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() 和键仍然一无所获。(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 属性来覆盖安全性吗?
注意:之前被标记为重复的帖子(如何使用 addEventListener 在 Firefox 中获取错误事件详细信息?)是一个不同的问题。我可以在包括火狐在内的所有浏览器中访问e.type
,es.url
等。Firefox 的不同之处在于 es.toString() 返回一个空字符串, JSON.stringify 看到一个空对象, Object.Keys(es) 返回一个空数组,等等。