Я разрабатываю расширение для 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 возникает, когда расширение должно проверить новый выбор, но обратный вызов события не получает информации о выбранном узле. Учитывая проблемы, описанные выше, кажется невозможным надежно определить местоположение узла пользователя на многокадровых страницах. Я упускаю что-то фундаментальное в моем подходе?