![](/img/trans.png)
[英]Is DOMContentLoaded and document.onload events are same?
[英]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.