繁体   English   中英

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

[英]Event listeners on plugin in document.onload events in Opera

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

特别是,这不起作用:

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

虽然通过例如alert()来延迟addEventListener()调用:

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

似乎插件只在document.onload之后加载。

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

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

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

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

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

我对 Opera 了解不多,但您是否尝试过使用 jquery 的就绪功能? 它的目的是添加一个你想在 DOM 完全加载后执行的函数,它应该跨浏览器工作。

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

可以在此处找到有关就绪功能的更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM