使用PhantomJS,我想注入一些JS,就好像在其他<script>
标记之前有一个额外的<script>
标记。这是因为页面上的脚本使用PhantomJS没有的一些功能,即Function.prototype.bind
和window.webkitRequestAnimationFrame
。我有一个JS文件和两个自定义实现,我希望PhantomJS在页面上运行脚本时使用它们。PhantomJS:在任何其他脚本运行之前注入脚本
难度在于,如果我在page.open之前执行page.injectJs,脚本将被注入一个空白页面,并且不会转移到正在打开的页面。
或者,如果我在page.open之后执行page.injectJs,则已经发生JavaScript错误(未定义的函数)已经太晚了。
我发现,似乎工作的一种方式,但显然是一个黑客:
page.onResourceReceived = function() {
page.injectJs('phantom-hacks.js')
};
这将给它多次(两次,每次资源,显然),不过没关系,因为我的剧本是幂等。但是,我想知道这样做的正确方法:只在页面上的任何脚本运行之前注入一次。
谢谢:)
为什么不保持一个哈希所有要注入其中关键是该文件的文件和价值在于它是否被注射或不和,如果没有被注入再注入呢?或者你可以在第一次运行后停止事件监听器? – Nonconformist 2013-06-12 19:55:41