johntitus/node-horseman

Add support for polyfilling missing PhantomJS JavaScript features

Open

#230 ouverte le 27 oct. 2016

Voir sur GitHub
 (7 commentaires) (2 réactions) (0 assignés)JavaScript (134 forks)batch import
enhancementhelp wanted

Métriques du dépôt

Stars
 (1 467 stars)
Métriques de merge PR
 (Aucune PR mergée en 30 j)

Description

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.

Guide contributeur