代码之家  ›  专栏  ›  技术社区  ›  Georg Fritzsche

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

  •  1
  • Georg Fritzsche  · 技术社区  · 15 年前

    我试图理解这样一个问题,即插件上的事件侦听器注册在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开发人员,我是否遗漏了一些简单的东西?或者这是一个常见的歌剧问题?

    3 回复  |  直到 14 年前
        1
  •  1
  •   Ola P. Kleiven    14 年前

    我们在Opera 10.60中进一步改进了这种处理方式,使行为更接近于其他浏览器WRT。插件初始化和脚本就绪。我相信原来的方法现在应该有效了。

        2
  •  2
  •   hallvors    15 年前

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

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

    在Opera,我们最近一直在尝试与该领域的大多数其他浏览器保持一致,Opera 10.50可能会更好地为您工作。不过,我不确定我们是否已经完全控制住了事情的发展,如果能在10点50分听到你的行为是否发生了变化,那将是很有意思的。

        3
  •  -1
  •   Matt Dearing    15 年前

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

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

    可以找到有关就绪函数的详细信息 here

    推荐文章