В расширении Chrome DevTools, как извлечь выбранный узел со страницы с несколькими кадрами для панели боковой панели элементов расширения - PullRequest
0 голосов
/ 31 августа 2018

Я разрабатываю расширение для Chrome devtools, которое отображает содержимое на боковой панели элементов на основе выбранного в данный момент узла. Как описано в документации , механизм работы с выбранным узлом вызывает chrome.devtools.inspectedWindow.eval, с кодом eval'd, включающим $0, переменная, указывающая на последний выбранный узел. Например, чтобы отобразить текущий выбранный узел в консоли, я мог бы позвонить eval('console.log($0)'). Информацию об этой проблеме см. В этом вопросе stackoverflow .

.

У меня проблема со страницами, содержащими фреймы. Вызов eval принимает объект параметров со свойством frameURL. Например:

eval('console.log($0)',{frameURL: 'http://www.iframeexample.com'}).

Это позволяет вызывающей стороне оценивать код в конкретном кадре. Однако каждый кадр (кроме about:blank srcs) имеет собственную переменную $0, указывающую на последний выбранный узел в окне этого кадра. Если на странице пять кадров, для $0 есть пять различных значений, по одному для каждого кадра. Когда мое расширение получает событие onSelectionChanged , как я могу узнать, какой узел пользователь в данный момент выбрал на панели элементов devtools, то есть, какое окно фрейма $ 0 указывает на правильный узел? Как я могу предоставить контент для правильного узла?

Моя вторая связанная проблема связана с фреймами с похожими источниками. Например, на странице frames.com есть два элемента iframe с одинаковым src (исключая различия в значении хеша src). Вызов eval с повторяющимся значением src будет выполнен в одном из кадров, но не в другом. Я не могу найти способ проверить оба кадра на текущий выбранный узел, $0. В этом случае, если пользователь выбирает в кадре узел, к которому я не могу получить доступ посредством eval-вызова, нет способа обслуживать контент, связанный с этим узлом.

Предоставление содержимого или функциональных возможностей, связанных с выбранным в данный момент узлом, является ключевым вариантом использования для добавления боковой панели элемента расширения devtools. Событие onSelectionChanged возникает, когда расширение должно проверить новый выбор, но обратный вызов события не получает информации о выбранном узле. Учитывая проблемы, описанные выше, кажется невозможным надежно определить местоположение узла пользователя на многокадровых страницах. Я упускаю что-то фундаментальное в моем подходе?

...