Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   querySelector возвращает null, пока не найдешь его в devtools (https://javascript.ru/forum/misc/83357-queryselector-vozvrashhaet-null-poka-ne-najjdesh-ego-v-devtools.html)

1111 22.11.2021 11:12

querySelector возвращает null, пока не найдешь его в devtools
 
Здравствуйте,

Столкнулся с очень страной ситуацией. Пытаюсь написать расширения для хром которое будет работать на странице с crm bitrix24,
суть в том, что когда я в консоле пытаюсь найти элемент

document.querySelector('.crm-entity-widget-client-contact-item.crm-entity-widget-client-contact-phone')


Мне возвращает null

Но как только с помощью инструмента разработчика хром, нахожу нужный элемент в разметке, выделив его, в той же консоле, querySelector корректно отрабатывает, как такое может быть?

Скриншот консоли
https://i.ibb.co/CB4gmwv/image.jpg

Мое предположение, что содержимое страницы грузится как-то динамически, из-за чего оно не находится, но как решить эту проблему я не понимаю, попробовал все методы поиска элемента на странице, ничего не помогло

1111 22.11.2021 11:18

Обнаружил важный момент, элемент который я пытаюсь найти, подгружаются в iframe

upd

Нашел решение, нахожу сам iframe с помощью querySelector, а объект document со всей разметкой из этого айфрейма получаю с помощью contentWindow.document

т.е.

let dealIframe = document.querySelector('.side-panel.side-panel-container > .side-panel-content-container > iframe').contentWindow.document;
let number = dealIframe.querySelector('.crm-entity-widget-client-contact-phone');

Aetae 22.11.2021 11:49

Элемент из iframe ты из основного окна через querySelector не получишь.
Если iframe ведёт на другой домен - вешай контенскрипт и для того домена. Если на этот же - сначала получай сам iframe, жди onload и через iframe.contentDocument.querySelector получай уже нужный элемент.


Часовой пояс GMT +3, время: 06:08.