javascript - 为什么 Safari 的 img 'onload' 事件对象为空?

标签 javascript safari dom-events

我期望看到什么(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 中获取预期的事件对象?或者就此而言,确保以与浏览器无关的方式正确的事件对象?

最佳答案

这些属性仍然存在,但它们是由 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/

相关文章:

swift - Safari 应用程序扩展如何捕获 beforeNavigate 事件?

javascript - onClick 事件不适用于 Firefox 中的 anchor 标记

php - 来自 PHP 的 Backbone JSON 请求问题

jquery - 在 Safari 上从左侧动画的粘性标题

python - 使用 py-appscript 访问 URL 时在 Mac Dock 中弹出 Python 应用程序

javascript - 按键和鼠标事件

Javascript线程竞争条件

javascript - 更改页面时AngularJS自定义窗口

javascript - 具有特定大小的pauseableBuffer?

javascript - 考虑 seo 在滚动时淡入淡出动画(但只有一次)