我正在使用这段代码制作火狐扩展
1: var Test {
2: f: function() {
3: alert("DOM content loaded");
4: window.removeEventListener("DOMContentLoaded", function(e) { Test.f(); }, false);
5: }
6: }
7: window.addEventListener("DOMContentLoaded", function(e) { Test.f(); }, false);
当DOM内容(网页)加载时,它应该执行函数f()中的代码,这意味着如果我打开新页面、新标签或重新加载页面,它应该给我一个警报。问题是,它给了我大约20个警报,而不是一个。
如果我想在函数f()中附加一些文本到每个锚点上(例如,如果我想要附加文本“(com)”,它将会附加“(com)(com)(com)(com)(com)”),那么问题会更加严重。
你知道如何实现我想要的行为吗?
removeEventListener
并没有帮助。罪魁祸首似乎是其他Firefox扩展和about:blank。我的DOMContentLoaded事件监听器是否忽略了由其他扩展引起的页面加载?
谢谢。
alert
,因为它会阻塞直到用户点击OK。也许可以使用window.dump
代替。 - Tylerwindow.dump
的输出? - xralfremoveEventListener
调用实际上并没有像您想象的那样删除事件。在两种情况下,您都传递了一个匿名函数,但它们不是相同的匿名函数。JavaScript每次定义时都会创建一个新的函数。为了真正删除事件侦听器,您需要将该函数保存到变量中,并将该变量传递到add
和remove
调用中。 - mAAdhaTTah