我正在开发一个屏幕阅读器项目,我需要在光标下面找到段落。为了在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);
无效?
我一直很感激你的帮助和想法。 :)
答案 0 :(得分:2)
虽然这不是你问题的直接答案,但我希望它仍然有用。不需要使用屏幕阅读器的扩展,特别是当浏览器的用户界面发生变化时,您可能不希望定期更新该扩展。 Firefox支持a number of accessibility APIs,您可以直接在应用程序中使用它。这些API具有稳定的优势,一旦您的实现完成,它应该继续工作(据我记得只有一次Mozilla破坏了与现有屏幕阅读器的兼容性)。
关于实际问题:您没有告诉任何有关此代码执行的上下文的信息。通常,扩展在其XUL覆盖中运行代码,这意味着上下文是浏览器窗口,而不是网页。这可以解释为什么你的代码不起作用(这是一个XUL文档,那里没有document.body
)。您可能的意思是将事件侦听器附加到加载网页的<tabbrowser>
元素:gBrowser.addEventListener(...)
。附注:如果您真的想捕获XUL文档中的所有事件,则应在document
或document.documentElement
上注册事件监听器。
顺便说一句,您可以在Error Console中看到与扩展程序相关的错误消息(我链接的文章介绍了如何在当前的Firefox版本中启用它)。
答案 1 :(得分:1)
我也有同样的问题,现在解决了。关闭代码后,请尝试添加document.body.addEventListener
。解析器无法识别“addEventListener”事件的DOM对象,因为DOM对象的HTML标记未关闭。
请参阅以下内容。效果很好。
<html>
<body>
...
<\body>
<script type="text/javascript">
document.body.addEventListener('click', function() { ... });
</script>
</html>
答案 2 :(得分:0)
我怀疑文档还没有准备好,所以没有什么可以绑定的。尝试向onload="addMyEventListener();"
添加<body>
,看看是否能解决问题。我不知道正确计算时间的方法,所以也许其他人可以用最好的方法来处理这个问题。
答案 3 :(得分:0)
此处可能还有其他问题,但addEventListener
来电的语法不正确,可能导致您遇到的问题:
document.body.addEventListener('mouseover',myfunc(mEvent),false);
实际上是在调用addEventListener
并将其作为第二个参数传递的同时调用“myfunc”。
你应该这样称呼它:
document.body.addEventListener('mouseover',function() { myfunc(mEvent) },false);