Skip to content


Subversion checkout URL

You can clone with
Download ZIP
A pure-JavaScript browser environment with early rubygem support.
JavaScript Other
Pull request Compare This branch is 207 commits ahead, 328 commits behind thatcher:master.
Failed to load latest commit information.
DTD theres a hole in the bucket
bin remove tidy
dist merge 1.1rc1 (i think)
gm gm example
htmlparser merge from thatcher
jsl oops I think I just commited incorrectly
lib whoops jumped the gun on release number ...
rhino Added support for the "quit" command/function provided by the Rhino s…
src missing // on host when doing a hash-only assign
test It would appear that only defining a getter for the value property of…
.gitignore dont remove the gemspec so it can be used via gh
.jslintrbrc add jslintrb infra
.project added xpath and xslt related stubs to satisfy prototype compat part o…
CHANGELOG.rdoc whoops jumped the gun on release number ...
Makefile did some refactoring of Glen E. Iveys substantial iframe contribution…
Manifest.txt don't include all the various bin files in the gem
README.rdoc Update README.rdoc
Rakefile add gemspec for use as a git source in bundler
Wakefile fix problem with set history fn name merged minor conflict, added load event changed, hopefully git is good
build.xml Sigificant refactoring of global scopes and a number of HTML fixes
envjs.gemspec add gemspec for use as a git source in bundler



The Johnson fork of env.js is pretty much mothballed (which is already pretty much true of Johnson, given the rise of v8 and the difficulty moving Johnson to 1.9.*). The current best practices seem to be based on a headless webkit.



A browser environment for javascript interpreters.

This is a fork of the env.js project ( See that link for env.js details. This fork is based on the Johnson Ruby gem (


For now, you can install the envjs gem by installing Johnson:

gem install johnson --prerelease

and then installing the envjs gem with

gem install envjs

Using envjs interactively

The envjs gem provides the envjsrb command, which functions as an extended version of the Johnson javascript shell. For example:

 mbp:env-js smparkes$ envjsrb
 js> this
 => [object Window 0]
 js> window.location
 => about:blank
 js> document.innerHTML
 => "<html><head><title></title></head><body></body></html>"

Embedding envjs

It's also possible to embed the envjs interpreter similar to the way it's done in Johnson, e.g.,

require 'rubygems' # if necessary
require 'johnson/tracemonkey'
require 'envjs/runtime'

envjs =
envjs.extend Envjs::Runtime
window = envjs.evaluate("window")
puts window.location.to_s # == "about:blank"
puts window.document.innerHTML # == "<html><head><title></title></head><body></body></html>"

You need the Runtime#wait at the end to give env.js's event loop a chance to execute queued events and timers. You may need to do this at other times as well, depending on the asynchronous nature of your application.


See and

Something went wrong with that request. Please try again.