我期望看到什么(Chrome 的输出):
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 中获取预期的事件对象?或者就此而言,确保以与浏览器无关的方式正确的事件对象?
最佳答案
这些属性仍然存在,但它们是由 prototype chain 提供的,Safari 的控制台在 __proto__
属性下折叠。
快速测试表明,Chrome 在事件对象本身上设置属性,但 Safari 和 Firefox 依赖于原型(prototype)链。
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 函数。
关于javascript - 为什么 Safari 的 img 'onload' 事件对象为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27559766/