2

Я пытаюсь создать расширение, чтобы показать запросы страницы как дерево, используя chrome.debugger. Я хотел бы иметь возможность назначить в качестве родителя динамического iframe, скрипта, который его создал, вместо рамки, где он находится. Чтобы сделать это, я думаю, мне нужно будет вставить точку останова DOM, используя домен DOMDebugger протокола отладки Chrome, но я не могу найти какой-либо пример того, как использовать метод setEventListenerBreakpoint.Расширение Chrome: обнаружение скрипта, созданного iframe

С помощью следующего кода:

chrome.debugger.sendCommand(
{tabId:currentTabId},'DOMDebugger.setEventListenerBreakpoint',{eventName:'subtree-modified'},function(a){ 
       console.dir(arguments); 
      }); 

обратного вызова вызывается только один раз, с пустой объект в качестве аргумента.

Как использовать setEventListenerBreakpoint?

+0

Не знаете об этом поле, но, может быть, 'Debugger.enable' необходимо? http://stackoverflow.com/questions/25764336/chrome-extension-domdebugger-api-does-not-work-anymore –

+0

Как правило, вы можете видеть команды, отправленные отладчиком во время выполнения действия, о котором идет речь, вручную, следуя процедура, описанная в документации https://developer.chrome.com/devtools/docs/debugger-protocol – wOxxOm

+0

Хороший совет, @wOxxOm ..Сохраняя протокол, я смог узнать правильную функцию, которую мне нужно будет использовать (setDOMBreakpoint), и для этого требуется получить идентификатор корневого узла (DOM.getDocument) и прослушивать события с изменением поддерева. Проблема в том, что это событие не указывает, какая фактическая модификация произошла, или какой идентификатор узла был вставлен в документ, поэтому у меня нет способа узнать, был ли он iframe или что-то еще. Итак, я думаю, что просто невозможно сделать то, что я искал. – Trashie

ответ

1

В конце концов, я сделал это косвенно, используя другой набор инструментов: - Получение запроса каждой страницы (событие «Network.requestWillBeSent») - Получение каждого сценария на странице (событие «Debugger.scriptParsed ")

Если запрос страницы имеет инициатор, и есть доступные фреймы стека, я могу получить сценарий, который вызывает этот запрос. Если запрос и сценарий принадлежат различным frameIds, это означает, что скрипт модифицирует (генерирует запросы) в другом кадре. Итак, я просто предполагаю, что весь iframe был создан этим скриптом (требуются другие условия, такие как iframe url == "about: blank" и т. Д.) Я предполагаю, что есть случаи, когда это предположение ложно, но это ближе я думаю, что смогу получить.