javascript - 如何在没有可区分的 id 或类的情况下检测对 dom 的更改

标签 javascript google-chrome-extension

我正在修复我的 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/

相关文章:

javascript - Chrome 扩展程序可将代码注入(inject)到某些预定义的 URls 中

javascript - 禁用弹出窗口并调用 browserAction.onClicked

javascript - Google 图表 - hAxis 上的不同格式

javascript - 按对象键查询 Firestore

javascript - 第一次迭代后, Angular ng-grid 选定的项目为空白

authentication - chrome.identity.launchWebAuthFlow 能否用于针对 Google API 进行身份验证?

javascript - 浏览器仍然泄漏真实的用户代理

javascript - setUninstallURL - 在 Safari 和 Firefox 中?

javascript - 使用raphael.js可以实现这种像素化效果吗?

javascript - 所有信息窗口都有相同的数据