Используя PhantomJS, я хотел бы добавить несколько JS, как если бы был дополнительный тег <script>
перед любыми другими тегами <script>
. Это связано с тем, что в сценариях на странице используются некоторые функции, которые отсутствуют у PhantomJS, а именно Function.prototype.bind
и window.webkitRequestAnimationFrame
. У меня есть JS файл с пользовательскими реализациями двух, и я бы хотел, чтобы PhantomJS использовал их при запуске скриптов на странице.
Трудность состоит в том, что если я делаю page.injectJs перед page.open, script вводится в пустую страницу и не переносится на открываемую страницу.
В качестве альтернативы, если я делаю page.injectJs после page.open, это слишком поздно, когда ошибки JavaScript (undefined) уже произошли.
Я нашел способ, который, кажется, работает, но, очевидно, взломан:
page.onResourceReceived = function() {
page.injectJs('phantom-hacks.js')
};
Это вводит его много раз (дважды для каждого ресурса, видимо), но это нормально, потому что мой script является идемпотентным. Тем не менее, я хотел бы знать правильный способ сделать это: вставлять его только один раз и до запуска любых скриптов на странице.
Спасибо:)