Javascript document.onload中插件上的事件侦听器在Opera中加载事件

Javascript document.onload中插件上的事件侦听器在Opera中加载事件,javascript,html,dom-events,opera,Javascript,Html,Dom Events,Opera,我试图理解一个问题,即插件上的事件侦听器注册在Opera中不起作用,除非我延迟它们 特别是,这不起作用: document.onload = function() { plugin.addEventListener("foo", function() { alert('onFoo'); }, false); } 延迟addEventListener()调用时,例如通过alert()执行以下操作: document.onload = function() {

我试图理解一个问题,即插件上的事件侦听器注册在Opera中不起作用,除非我延迟它们

特别是,这不起作用:

document.onload = function() {
    plugin.addEventListener("foo", function() { alert('onFoo'); }, false);
}
延迟
addEventListener()
调用时,例如通过
alert()
执行以下操作:

document.onload = function() {
    alert('onload()');
    plugin.addEventListener("foo", function() { alert('onFoo'); }, false);
}
似乎插件只在
document.onload
之后加载


作为一名非web开发人员,我是否缺少一些简单的东西?或者这是一个常见的Opera问题?

我对Opera了解不多,但您是否尝试过使用jquery的ready函数?它的目的是添加一个您希望在DOM完全加载后执行的函数,并且它应该可以跨浏览器工作

$(document).ready(function() {
 plugin.addEventListener("foo", function() { alert('onFoo'); }, false);
});

有关ready函数的更多信息,请参见

一般来说,插件初始化、脚本执行和文档事件处理的时间没有很好地指定,这意味着浏览器可能会做不同的事情

在这种情况下,听起来您需要确保在添加侦听器之前对插件进行了初始化。一种方法是检查插件将定义的属性(例如,如果它是一个Flash插件,则可以检查PercentLoaded是否已定义,以查看它是否已准备好编写脚本。)如果未准备好编写脚本,则可以使用超时稍后重试


在Opera,我们最近一直在尝试与该领域的大多数其他浏览器保持一致,Opera 10.50可能会更适合您。不过,我不确定我们是否已经完全控制住了一切——如果您能告诉我们10.50中的行为是否发生了变化,那将是一件很有趣的事情。

我们在Opera 10.60中进一步改进了对这一点的处理,因此该行为与其他浏览器wrt更为接近。插件初始化和脚本可读性。我相信原来的方法现在应该可以用了。

我不想让插件用户有额外的依赖关系(我正在开发一个开源插件框架,不想修复某个网站)。旁注:请使用window.onload而不是document.onload,Opera不再支持这一点,因为其他浏览器都不支持了-/刚用10.50测试过,问题是reamins。我猜初始化顺序没有很好地定义,但遗憾的是Opera与其他浏览器的行为(即所有其他浏览器都可以正常工作)发生了冲突。这是其中一个测试页面:(顺便说一句,document.onload不是我真正使用的东西,只是想减少示例)如果你看到Opera的表现与其他浏览器不同,请在我不知道是否有浏览器保证插件在加载事件之前初始化-这是Opera应该调查的事情,如果我们能弄清楚其他浏览器在做什么,可能会改变。我做了,只是从来没有得到任何反馈。啊,我想是DSK-281650吧。我会让一些关键人物注意到这一点,让我们看看会发生什么。感谢这里的反馈,我会在有时间的时候查看。事实上,这似乎在当前的Opera版本中得到了解决。