代码之家  ›  专栏  ›  技术社区  ›  Ryan Schumacher

如何检测对没有可分辨ID或类的DOM的更改

  •  1
  • Ryan Schumacher  · 技术社区  · 14 年前

    我正在为我的Gmail谷歌浏览器扩展修复一个bug。我需要检测富格式栏何时显示,但是所有的ID和类都是模糊的,我认为这是不可靠的。

    检测消息画布

    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);
    

    这对于撰写新邮件或类似邮件很有效,因为CanvasDOM存在,因此可以检测到。

    但是,单击“答复”、“全部答复”或“转发”时不起作用,因为DOM是动态更改的,并且 chrome.tabs.onSelectionChanged.addListener 无法检测到页面中的更改,就像我对撰写所做的一样。

    1 回复  |  直到 14 年前
        1
  •  4
  •   serg    14 年前

    最简单的解决方案是 jQuery.live() 为此。

    如果你想保持强硬,那么你可以将支票绑定到 DOMNodeInserted 当一个新元素添加到dom时激发的事件,或者如果它没有捕捉到它,则更一般。 DOMSubtreeModified 以任何方式修改DOM时激发的事件。可以找到有关事件的更多信息 here .