johntitus/node-horseman

Add support for polyfilling missing PhantomJS JavaScript features

Open

#230 创建于 2016年10月27日

在 GitHub 查看
 (7 评论) (2 反应) (0 负责人)JavaScript (1,467 star) (134 fork)batch import
enhancementhelp wanted

描述

PhantomJS does not support some features that websites expect it to. It would be nice for horseman to have built-in support for polyfilling these features.

Here is a way I came up with for polyfilling externally with Polyfill.io, for reference. It is somewhat gross, so if someone comes up with a better way that's great.

var Horseman = require('node-horseman');
var POLYURL = 'https://cdn.polyfill.io/v2/polyfill.min.js';

var horseman = new Horseman();

horseman
    .userAgent()
    .then(function(useragent) { // Get Polyfill based on real UserAgent
        return this.download(POLYURL + '?ua=' + useragent);
    })
    .then(function(polyfill) {
        // Make polyfill into function
        var polyfun = new Function(polyfill);
        // Wrap function in evaluateJavaScript
        var onInit = new Function(
            'console.log("onInitialized");' +
            'page.evaluateJavaScript(' + polyfun.toString() + ')'
        );
        // Call before page loads
        return this.at('initialized', onInit);
    })
    /* Do horseman stuff now */

Assistance/contribution would be greatly appreciated.

贡献者指南