为什么safari的img' onload'事件对象空?

时间:2014-12-19 04:32:37

标签: javascript javascript-events safari

我期望看到的内容(来自chrome的输出)

chrome

safari给了我什么

safari

以类似于以下方式获得的结果:

var myHandler;
myHandler = function(e) {
  return console.log(e);
};
var image = new Image()
image.onload = myHandler
image.src = "http://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Smiley.svg/2000px-Smiley.svg.png"

有没有办法在safari中获取预期的事件对象?或者就此而言,以浏览器无关的方式确保正确的事件对象?

2 个答案:

答案 0 :(得分:1)

属性仍然存在,但它们由prototype chain提供,Safari的控制台在__proto__属性下折叠。

快速测试表明,Chrome会在事件对象本身上设置属性,但Safari和Firefox依赖于原型链。

var myHandler;
myHandler = function(e) {
  return console.log(e.hasOwnProperty("bubbles"));//true in Chrome, false in Safari and Firefox.
};
var image = new Image();
image.onload = myHandler;
image.src = "http://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Smiley.svg/2000px-Smiley.svg.png";

注意:

__proto__中的某些属性在控制台中显示为undefined,即使实际访问这些属性也会产生正确的值。我相信Safari在内部对这些属性使用了getter函数。

答案 1 :(得分:0)

您确定文档准备好了吗?您应该使用以下内容检查它:

$( document ).ready(function() {
  console.log( "ready!" );
});