Как обнаружить изменения в DOM без различимых идентификаторов или классов - PullRequest
1 голос
/ 16 сентября 2010

Я работаю над исправлением ошибки в моем расширении Google Chrome для Gmail.Мне нужно определить, когда отображается панель расширенного формата, но все идентификаторы и классы запутаны, и я полагаю, что они ненадежны.

Чтобы обнаружить холст сообщения

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 динамически изменяется и chrome.tabs.onSelectionChanged.addListener не может обнаружить изменение страницы, как я это делаю для Compose.

1 Ответ

4 голосов
/ 16 сентября 2010

Простым решением было бы использовать jQuery.live() для этого.

Если вы хотите остаться хардкорным, тогда вы можете привязать свой чек к событию DOMNodeInserted, которое срабатывает при добавлении нового элемента в dom, или, если оно не перехватывает его, тогда более общее событие DOMSubtreeModified, которое срабатывает при Дом изменен в любом случае. Подробнее о событиях можно узнать здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...