我试图理解插件上的事件监听器注册在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问题,有一个常见的解决方法吗?
答案 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