GithubHelp home page GithubHelp logo

isabella232 / grunt-lib-phantomjs Goto Github PK

View Code? Open in Web Editor NEW

This project forked from gruntjs/grunt-lib-phantomjs

0.0 0.0 0.0 139 KB

Grunt and PhantomJS, sitting in a tree.

Home Page: http://gruntjs.com/

License: MIT License

JavaScript 100.00%

grunt-lib-phantomjs's Introduction

grunt-lib-phantomjs Build Status: Linux Build Status: Windows

Grunt and PhantomJS, sitting in a tree.

Usage

The best way to understand how this lib should be used is by looking at the grunt-contrib-qunit plugin. Mainly, look at how the lib is required, how event handlers are bound and how PhantomJS is actually spawned.

Also, in the case of the grunt-contrib-qunit plugin, it's important to know that the page being loaded into PhantomJS doesn't know it will be loaded into PhantomJS, and as such doesn't have any PhantomJS->Grunt code in it. That communication code, aka. the "bridge", is dynamically injected into the html page.

An inline example

If a Grunt task looked something like this:

grunt.registerTask('mytask', 'Integrate with phantomjs.', function() {
  var phantomjs = require('grunt-lib-phantomjs').init(grunt);
  var errorCount = 0;

  // Handle any number of namespaced events like so.
  phantomjs.on('mytask.ok', function(msg) {
    grunt.log.writeln(msg);
  });

  phantomjs.on('mytask.error', function(msg) {
    errorCount++;
    grunt.log.error(msg);
  });

  // Create some kind of "all done" event.
  phantomjs.on('mytask.done', function() {
    phantomjs.halt();
  });

  // Built-in error handlers.
  phantomjs.on('fail.load', function(url) {
    phantomjs.halt();
    grunt.warn('PhantomJS unable to load URL.');
  });

  phantomjs.on('fail.timeout', function() {
    phantomjs.halt();
    grunt.warn('PhantomJS timed out.');
  });

  // This task is async.
  var done = this.async();

  // Spawn phantomjs
  phantomjs.spawn('test.html', {
    // Additional PhantomJS options.
    options: {},
    // Complete the task when done.
    done: function(err) {
      done(err || errorCount === 0);
    }
  });

});

And test.html looked something like this (note the "bridge" is hard-coded into this page and not injected):

<!doctype html>
<html>
<head>
<script>

// Send messages to the parent PhantomJS process via alert! Good times!!
function sendMessage() {
  var args = [].slice.call(arguments);
  alert(JSON.stringify(args));
}

sendMessage('mytask.ok', 'Something worked.');
sendMessage('mytask.error', 'Something failed.');
sendMessage('mytask.done');

</script>
</head>
<body>
</body>
</html>

Then running Grunt would behave something like this:

$ grunt mytask
Running "mytask" task
Something worked.
>> Something failed.
Warning: Task "mytask" failed. Use --force to continue.

Aborted due to warnings.

API

phantomjs.halt()

Call this when everything has finished successfully, or when something horrible happens, and you need to clean up and abort.

phantomjs.spawn(pageURL, options)

Spawn a PhantomJS process. The method returns a reference to the spawned process.
This method has the following arguments:

pageURL

Type: string
Default: no default value, the user has to set it explicitly.

URL or path to the page .html test file to run.

Options

Type: object

The options object has these possible properties:

done

Type: function
Default: no default value, the user has to set it explicitly.

The callback to call when the task is done.

failCode

Type: number
Default: 0

The error code to exit with when an Error occurs.

killTimeout

Type: number
Default: 1000 ms

The timeout in milliseconds after which the PhantomJS process will be killed.

options (PhantomJS options)

Type: object
Default: {}

Additional options to passe to PhantomJS. This object has the following properties:

timeout

Type: number
Default: undefined

PhantomJS' timeout, in milliseconds.

inject

Type: string|array
Default: undefined

One or multiple (array) JavaScript file names to inject into the page.

page

Type: object
Default: undefined

An object of options for the PhantomJS page object.

screenshot

Type: boolean
Default: undefined

Saves a screenshot on failure

OS Dependencies

PhantomJS requires these dependencies on Ubuntu/Debian:

apt-get install libfontconfig1 fontconfig libfontconfig1-dev libfreetype6-dev

grunt-lib-phantomjs's People

Contributors

arkni avatar aschekatihin avatar ascott1 avatar bclwhitaker avatar bdowling avatar benhutchins avatar cowboy avatar ctalkington avatar cymen avatar fgribreau avatar gotdibbs avatar gseguin avatar gyandeeps avatar jaredstehler avatar jaredstehler-cengage avatar jsoverson avatar jzaefferer avatar kmiyashiro avatar nathancahill avatar nicknisi avatar ntwb avatar parlarjb avatar patrickkettner avatar shama avatar sindresorhus avatar ssafejava avatar theefer avatar vladikoff avatar xeio avatar xhmikosr avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.