Вставить код между двумя событиями scriptParsed с кукловодом - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть библиотека, включенная через <script>, которая добавляет себя к объекту window, а затем сразу получает ссылку в следующем <script>, то есть:

<script src="lib.js"></script>
<script>
    var foo = new LIB.SomeClass();
    LIB.doStuff();
    ....
</script>

Для профилированиятеперь мне нужно прикрепить прокси к нескольким свойствам этой библиотеки / глобального LIB объекта до следующего скрипта (так до LIB.SomeClass() в приведенном выше).
Все это имеетпроизойти программно - я не могу полагаться на жестко запрограммированные номера строк и не могу изменить lib.js для запуска фиктивного события, как только все будет инициализировано.

Мой текущий подход:

  1. Дождитесь события Debugger.scriptParsed для lib.js
  2. Посмотрите, сколько строк в файле lib.js (event.endLine)
  3. Поместите точку останова прямо напоследняя строка lib.js (Debugger.setBreakpointByUrl({lineNumber: ...})
  4. Перезагрузите страницу, ожидая срабатывания Debugger.paused
  5. Установите прокси в обработчике Debugger.paused

Но это кажется излишне запутанным, особенно перезагрузка ощущается как плохой взлом.

Question:
Есть ли способ ввести мой код инструментария сразу после Debugger.scriptParsed, но все еще гарантированно до загрузки следующего скрипта?
Я пытался вызвать Debugger.pause в обработчике scriptParsed, ноэто слишком ненадежно и просто привело к частым гонкам.

Спасибо.

1 Ответ

0 голосов
/ 27 сентября 2018

Надеюсь, это поможет вам вставить ваш файл .js на страницу.

await page.evaluateOnNewDocument(
  //just put the location of your .js file
  fs.readFileSync(`${__dirname}/scripts/preload.js`, 'utf8'),
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...