Opera中的document.onload事件中的插件上的事件侦听器

时间:2010-03-01 03:35:56

标签: javascript html javascript-events opera

我试图理解插件上的事件监听器注册在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之后加载。

作为一名非网络开发者,我在这里缺少一些简单的东西吗?或者这是一个已知的Opera问题,有一个常见的解决方法吗?

3 个答案:

答案 0 :(得分:2)

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

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

在Opera,我们最近一直试图与该领域的大多数其他浏览器保持一致,而Opera 10.50可能会更适合您。我不确定我们是否已经完全控制了事情 - 听到你的行为是否在10.50改变了会很有趣。

答案 1 :(得分:1)

我们在Opera 10.60中进一步改进了对此的处理,因此行为更接近其他浏览器。插件初始化和脚本准备。我相信最初的方法现在应该有效。

答案 2 :(得分:-1)

我对Opera知之甚少,但您是否尝试过使用jquery的ready函数?它的目的是在DOM完全加载后添加一个你想要执行的函数,它应该可以跨浏览器工作。

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

有关就绪功能的更多信息,请参见here