使用 PhantomJS,我想注入一些 JS,就好像<script>
在任何其他<script>
标签之前有一个额外的标签一样。这是因为页面上的脚本使用了一些 PhantomJS 没有的功能,即Function.prototype.bind
和window.webkitRequestAnimationFrame
。我有一个 JS 文件,其中包含两者的自定义实现,我希望 PhantomJS 在页面上运行脚本时使用它们。
困难在于,如果我在 page.open 之前执行 page.injectJs,则脚本会被注入到一个空页面中,并且不会转移到正在打开的页面中。
或者,如果我在 page.open 之后执行 page.injectJs,则为时已晚,因为 JavaScript 错误(未定义的函数)已经发生。
我找到了一种似乎可行的方法,但显然是一种 hack:
page.onResourceReceived = function() {
page.injectJs('phantom-hacks.js')
};
这会多次注入它(显然,每个资源两次),但这没关系,因为我的脚本是幂等的。但是,我想知道执行此操作的正确方法:仅在运行页面上的任何脚本之前注入一次。
谢谢 :)