2010-09-16 53 views
1

我正在修复Gmail的Gmail Chrome扩展的错误。我需要检测何时显示Rich Format栏,但所有的ID和类都被模糊处理,我认为不可靠。如何检测没有可区分的ID或类别的dom更改

检测消息帆布

this.canvas_frame_document.evaluate("//iframe[contains(@class, 'editable')]", 
    this.canvas_frame_document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, 
    null); 

和检测富文本栏中

this.canvas_frame_document.evaluate("//img[@command='+underline']", 
    this.canvas_frame_document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, 
    null); 

这非常适用于因为画布DOM存在,从而检测撰写新邮件等。

但是,当单击回复时,回复全部或转发不起作用,因为动态更改了dom,并且chrome.tabs.onSelectionChanged.addListener无法检测页面中的更改,就像我为Compose做的那样。

+0

你想听什么类型的事件?当Rich Format栏开始存在时,你想学习吗? – strager 2010-09-16 17:40:29

+0

@strager:节点被插入到DOM中,是的。 – 2010-09-16 22:35:38

回答

4

简单的解决方案是使用jQuery.live()

如果你想留铁杆那么你可以支票绑定到DOMNodeInserted事件,当一个新的元素添加到DOM,或火灾,如果不抓住它,然后更一般的DOMSubtreeModified事件,当DOM被修改时触发以任何方式。更多关于事件的信息请见here

+0

啊谢谢,我只是不希望包括更多的JavaScript到我的扩展超过必要,所以它不是另一个扩展吃掉了太多的资源。我会试试这个。 – 2010-09-16 22:33:44

+0

我用DOMSubtreeModified来捕捉变化。谢谢您的帮助!我发现http://help.dottoro.com/ljrmcldi.php有帮助。 – 2010-10-05 19:31:44