Sử dụng PhantomJS, tôi muốn chèn một số JS như thể có thêm một thẻ <script>
trước bất kỳ thẻ <script>
nào khác. Điều này là do các tập lệnh trên trang sử dụng một số chức năng mà PhantomJS không có, cụ thể là Function.prototype.bind
và window.webkitRequestAnimationFrame
. Tôi có một tập tin JS với triển khai tùy chỉnh của hai và tôi muốn PhantomJS sử dụng chúng khi chạy các kịch bản trên trang.PhantomJS: tiêm một tập lệnh trước khi bất kỳ tập lệnh nào khác chạy
Khó khăn là nếu tôi làm page.injectJs trước page.open, tập lệnh được đưa vào trang trống và không được chuyển sang trang đang mở.
Hoặc, nếu tôi thực hiện page.injectJs sau khi page.open, đã quá muộn vì các lỗi JavaScript (chức năng không xác định) đã xảy ra.
Tôi đã tìm thấy một cách mà xuất hiện để làm việc, nhưng rõ ràng là một hack:
page.onResourceReceived = function() {
page.injectJs('phantom-hacks.js')
};
này đưa nó nhiều lần (hai lần cho mỗi tài nguyên, rõ ràng), nhưng đó là okay vì kịch bản của tôi là idempotent . Tuy nhiên, tôi muốn biết cách thích hợp để làm điều này: tiêm nó chỉ một lần và trước khi bất kỳ kịch bản trên trang được chạy.
Xin cảm ơn :)
tại sao không giữ băm với tất cả các tệp bạn muốn tiêm ở đâu khóa là tệp và giá trị là tệp được tiêm hay không và nếu chưa được tiêm thì hãy tiêm? Hoặc bạn chỉ có thể dừng người nghe sự kiện sau lần chạy đầu tiên? – Nonconformist