Javascript document.body.addEventListener不工作

Javascript document.body.addEventListener不工作,javascript,firefox-addon,Javascript,Firefox Addon,我正在做一个屏幕阅读器项目,我需要把段落放在光标下。为了在Firefox中实现这一点,我编写了一个扩展,我的屏幕阅读器通过套接字连接到该扩展,并获取文本。我需要在光标下获取当前元素,并且函数在我自己编写的示例html页面中运行良好(因此函数没有问题) 但是,当我尝试将函数附加到扩展名中的JS文件时,似乎从未调用“document.body.addEventListener('mouseover',myfunc(mEvent),false);”调用的函数。 但如果我打电话 document.bod

我正在做一个屏幕阅读器项目,我需要把段落放在光标下。为了在Firefox中实现这一点,我编写了一个扩展,我的屏幕阅读器通过套接字连接到该扩展,并获取文本。我需要在光标下获取当前元素,并且函数在我自己编写的示例html页面中运行良好(因此函数没有问题)

但是,当我尝试将函数附加到扩展名中的JS文件时,似乎从未调用“document.body.addEventListener('mouseover',myfunc(mEvent),false);”调用的函数。 但如果我打电话

document.body.addEventListener('mouseover',function(mEvent){...},true);
调用myfunc

我是javascript新手,所以如果这是一个愚蠢的问题,请原谅,但是为什么

document.body.addEventListener('mouseover',function(mEvent){...},true);
它不起作用了吗


我一直很感激你的帮助和想法

我怀疑文档还没有准备好,因此没有什么可绑定的。尝试将
onload=“addMyEventListener();”
添加到您的
中,看看是否可以解决问题。我不知道正确的计时方法,所以也许其他人可以插话告诉我最好的处理方法。

这里可能还有其他问题,但您的
addEventListener
调用的语法不正确,可能导致您看到的问题:

document.body.addEventListener('mouseover',myfunc(mEvent),false)
实际上是在调用
addEventListener
并将其作为第二个参数传递的同时调用“myfunc”

您应该这样称呼它:


document.body.addEventListener('mouseover',function(){myfunc(mEvent)},false)

虽然这不是对您的问题的直接回答,但我希望它能有所帮助。没有必要为屏幕阅读器使用扩展,尤其是当浏览器的用户界面发生变化时,您可能不希望定期更新该扩展。Firefox支持您可以直接从应用程序中使用的功能。这些API的优点是稳定,一旦实现完成,它应该会继续工作(据我所记得,只有一次Mozilla破坏了与现有屏幕阅读器的兼容性)

至于实际问题:您没有告诉任何关于执行此代码的上下文的信息。通常,扩展在其XUL覆盖中运行代码,这意味着上下文是浏览器窗口,而不是网页。这可以解释为什么您的代码不工作(它是一个XUL文档,没有
document.body
)。您可能的意思是将事件侦听器附加到加载网页的
元素:
gBrowser.addEventListener(…)
。旁注:如果您真的想捕获XUL文档上的所有事件,您应该在
document
document.documentElement
上注册一个事件侦听器


顺便说一句,您可以在中看到与扩展相关的错误消息(我链接到的文章解释了如何在当前的Firefox版本中启用它)。

我也遇到了同样的问题,现在已经解决了。关闭标记后,尝试添加
document.body.addEventListener
。解析器无法识别“addEventListener”事件的DOM对象,因为DOM对象的HTML标记未关闭

请参阅以下内容。它工作得很好

<html>
    <body>
    ...
    <\body>

    <script type="text/javascript">
        document.body.addEventListener('click', function() { ... });
    </script>
</html>

...
document.body.addEventListener('click',function(){…});

根据瓦拉迪米尔·帕兰特的建议,以下措施正在发挥作用:

document.addEventListener('click', function() { ... }, false);

谢谢Matt,但准确地说,我在项目中这样调用了addEventListener:document.body.addEventListener('mouseover',function(mEvent){…},false);错了吗?(很抱歉在问题中不准确和不清楚)好的,那就对了-我建议在你的问题中更正它,只是为了澄清。@Luke:我建议你再试一次-你的更正使问题变得非常混乱。我认为您更改了错误的代码行。我想您是对的(就我对JavaScript的有限知识而言,它似乎是正确的)。但是我正在写一个扩展,所以我没有。但是我想正如你所说,当我调用函数时,文档还没有准备好。我在火车上,所以不能为你查找它。搜索模仿jquery的document.ready。我想这就是你想做的。从你的科学答案中可以学到很多好东西。但是对于屏幕阅读器,我必须使用ISimpleDOMNode.idl,并且我的代码是用c#编写的,它有一些问题,如本文所述。经过多次搜索,我发现一个解决方案是使用扩展和套接字。但现在我认为是时候添加包装器并使用ISimpleDOMNode.idl了!非常感谢您的宝贵回复。我试着把它们记在心里像这样将内容放在
之外不是一种坏做法吗?是的,不要将
标记放在
之外,它不会验证: