我正在修复我的 Gmail 谷歌浏览器扩展程序的错误。我需要检测 Rich Format 栏何时显示,但所有 ID 和类都被混淆了,我认为不可靠。
检测消息 Canvas
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);
这对于撰写新电子邮件等非常有效,因为 Canvas dom 存在并且因此可以检测到。
但是,当单击回复、回复全部或转发时不起作用,因为 dom 是动态更改的并且 chrome.tabs.onSelectionChanged.addListener
无法检测到页面中的更改,因为我为 Compose 做。
最佳答案
简单的解决方案是为此使用 jQuery.live()
。
如果你想保持核心,那么你可以将你的检查绑定(bind)到 DOMNodeInserted
事件,当一个新元素被添加到 dom 时,或者如果没有捕获它,那么更通用的 DOMSubtreeModified
以任何方式修改 dom 时触发的事件。可以找到有关事件的更多信息 here .
关于javascript - 如何在没有可区分的 id 或类的情况下检测对 dom 的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3728029/