Remove previous phantomjs.org assets.

Issue #10627 https://github.com/ariya/phantomjs/issues/10627
gh-pages
Jamie Mason 2013-11-11 13:37:35 +00:00 committed by Ariya Hidayat
parent 54c459a289
commit eb99b00aa6
54 changed files with 0 additions and 3714 deletions

View File

@ -1,358 +0,0 @@
/*
960 Grid System ~ Core CSS.
Learn more ~ http://960.gs/
Licensed under GPL and MIT.
*/
/*
Forces backgrounds to span full width,
even if there is horizontal scrolling.
Increase this if your layout is wider.
Note: IE6 works fine without this fix.
*/
body {
min-width: 960px;
}
/* `Container
----------------------------------------------------------------------------------------------------*/
.container_12 {
margin-left: auto;
margin-right: auto;
width: 960px;
}
/* `Grid >> Global
----------------------------------------------------------------------------------------------------*/
.grid_1,
.grid_2,
.grid_3,
.grid_4,
.grid_5,
.grid_6,
.grid_7,
.grid_8,
.grid_9,
.grid_10,
.grid_11,
.grid_12 {
display: inline;
float: left;
margin-left: 10px;
margin-right: 10px;
}
.push_1, .pull_1,
.push_2, .pull_2,
.push_3, .pull_3,
.push_4, .pull_4,
.push_5, .pull_5,
.push_6, .pull_6,
.push_7, .pull_7,
.push_8, .pull_8,
.push_9, .pull_9,
.push_10, .pull_10,
.push_11, .pull_11 {
position: relative;
}
/* `Grid >> Children (Alpha ~ First, Omega ~ Last)
----------------------------------------------------------------------------------------------------*/
.alpha {
margin-left: 0;
}
.omega {
margin-right: 0;
}
/* `Grid >> 12 Columns
----------------------------------------------------------------------------------------------------*/
.container_12 .grid_1 {
width: 60px;
}
.container_12 .grid_2 {
width: 140px;
}
.container_12 .grid_3 {
width: 220px;
}
.container_12 .grid_4 {
width: 300px;
}
.container_12 .grid_5 {
width: 380px;
}
.container_12 .grid_6 {
width: 460px;
}
.container_12 .grid_7 {
width: 540px;
}
.container_12 .grid_8 {
width: 620px;
}
.container_12 .grid_9 {
width: 700px;
}
.container_12 .grid_10 {
width: 780px;
}
.container_12 .grid_11 {
width: 860px;
}
.container_12 .grid_12 {
width: 940px;
}
/* `Prefix Extra Space >> 12 Columns
----------------------------------------------------------------------------------------------------*/
.container_12 .prefix_1 {
padding-left: 80px;
}
.container_12 .prefix_2 {
padding-left: 160px;
}
.container_12 .prefix_3 {
padding-left: 240px;
}
.container_12 .prefix_4 {
padding-left: 320px;
}
.container_12 .prefix_5 {
padding-left: 400px;
}
.container_12 .prefix_6 {
padding-left: 480px;
}
.container_12 .prefix_7 {
padding-left: 560px;
}
.container_12 .prefix_8 {
padding-left: 640px;
}
.container_12 .prefix_9 {
padding-left: 720px;
}
.container_12 .prefix_10 {
padding-left: 800px;
}
.container_12 .prefix_11 {
padding-left: 880px;
}
/* `Suffix Extra Space >> 12 Columns
----------------------------------------------------------------------------------------------------*/
.container_12 .suffix_1 {
padding-right: 80px;
}
.container_12 .suffix_2 {
padding-right: 160px;
}
.container_12 .suffix_3 {
padding-right: 240px;
}
.container_12 .suffix_4 {
padding-right: 320px;
}
.container_12 .suffix_5 {
padding-right: 400px;
}
.container_12 .suffix_6 {
padding-right: 480px;
}
.container_12 .suffix_7 {
padding-right: 560px;
}
.container_12 .suffix_8 {
padding-right: 640px;
}
.container_12 .suffix_9 {
padding-right: 720px;
}
.container_12 .suffix_10 {
padding-right: 800px;
}
.container_12 .suffix_11 {
padding-right: 880px;
}
/* `Push Space >> 12 Columns
----------------------------------------------------------------------------------------------------*/
.container_12 .push_1 {
left: 80px;
}
.container_12 .push_2 {
left: 160px;
}
.container_12 .push_3 {
left: 240px;
}
.container_12 .push_4 {
left: 320px;
}
.container_12 .push_5 {
left: 400px;
}
.container_12 .push_6 {
left: 480px;
}
.container_12 .push_7 {
left: 560px;
}
.container_12 .push_8 {
left: 640px;
}
.container_12 .push_9 {
left: 720px;
}
.container_12 .push_10 {
left: 800px;
}
.container_12 .push_11 {
left: 880px;
}
/* `Pull Space >> 12 Columns
----------------------------------------------------------------------------------------------------*/
.container_12 .pull_1 {
left: -80px;
}
.container_12 .pull_2 {
left: -160px;
}
.container_12 .pull_3 {
left: -240px;
}
.container_12 .pull_4 {
left: -320px;
}
.container_12 .pull_5 {
left: -400px;
}
.container_12 .pull_6 {
left: -480px;
}
.container_12 .pull_7 {
left: -560px;
}
.container_12 .pull_8 {
left: -640px;
}
.container_12 .pull_9 {
left: -720px;
}
.container_12 .pull_10 {
left: -800px;
}
.container_12 .pull_11 {
left: -880px;
}
/* `Clear Floated Elements
----------------------------------------------------------------------------------------------------*/
/* http://sonspring.com/journal/clearing-floats */
.clear {
clear: both;
display: block;
overflow: hidden;
visibility: hidden;
width: 0;
height: 0;
}
/* http://www.yuiblog.com/blog/2010/09/27/clearfix-reloaded-overflowhidden-demystified */
.clearfix:before,
.clearfix:after,
.container_12:before,
.container_12:after {
content: '.';
display: block;
overflow: hidden;
visibility: hidden;
font-size: 0;
line-height: 0;
width: 0;
height: 0;
}
.clearfix:after,
.container_12:after {
clear: both;
}
/*
The following zoom:1 rule is specifically for IE6 + IE7.
Move to separate stylesheet if invalid CSS is a problem.
*/
.clearfix,
.container_12 {
zoom: 1;
}

1
CNAME
View File

@ -1 +0,0 @@
phantomjs.org

View File

@ -1 +0,0 @@
<meta http-equiv="refresh" content="0;https://github.com/ariya/phantomjs/wiki/API-Reference-ChildProcess" />

View File

@ -1 +0,0 @@
<meta http-equiv="refresh" content="0;https://github.com/ariya/phantomjs/wiki/Examples" />

View File

@ -1 +0,0 @@
<meta http-equiv="refresh" content="0;https://github.com/ariya/phantomjs/wiki/API-Reference-FileSystem" />

View File

@ -1 +0,0 @@
<meta http-equiv="refresh" content="0;https://github.com/ariya/phantomjs/wiki/API-Reference" />

View File

@ -1 +0,0 @@
<meta http-equiv="refresh" content="0;https://github.com/ariya/phantomjs/wiki/API-Reference-phantom" />

View File

@ -1 +0,0 @@
<meta http-equiv="refresh" content="0;https://github.com/ariya/phantomjs/wiki/API-Reference-System" />

View File

@ -1 +0,0 @@
<meta http-equiv="refresh" content="0;https://github.com/ariya/phantomjs/wiki/API-Reference-WebPage" />

View File

@ -1 +0,0 @@
<meta http-equiv="refresh" content="0;https://github.com/ariya/phantomjs/wiki/API-Reference-WebServer" />

View File

@ -1,157 +0,0 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<title>PhantomJS: Build Instructions</title>
<meta name="description" content="">
<meta name="author" content="">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="screen.min.css">
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-21665893-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<style>
#description p {
line-height: 125%;
text-align: left;
margin-bottom: 10px;
margin-top: 10px;
}
#description h2 {
text-align: left;
margin: 0.8em 0;
}
#description pre {
margin-left: 1em;
}
</style>
</head>
<body>
<div id="intro">
<div id="header" class="container_12">
<a href="index.html" class="grid_4 alpha"><img src="images/phantomjs-logo.png" alt="PhantomJS" id="logo" width="240" height="80"></a>
<ul id="nav" class="grid_8 omega">
<li><a href="https://github.com/ariya/phantomjs">Source Code</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki">Documentation</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/API-Reference">API</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/Examples">Examples</a></li>
<li><a href="faq.html">FAQ</a></li>
</ul>
</div>
<div id="introduction" class="container_12">
<div class="grid_7 alpha">
<h1>Build Instructions</h1>
</div>
</div>
</div>
<div id="description" class="container_12">
<div class="grid_10">
<p><strong>Warning</strong>: Compiling PhantomJS from source takes a long time, mainly due to thousands of files in the WebKit module. With 4 parallel compile jobs on a modern machine, the entire process takes roughly 30 minutes. It is highly recommended to download and install the ready-made <a href="download.html">binary package</a> if it is available.</p>
<h2 id="mac">Mac OS X</h2>
<p>Install <a href="https://developer.apple.com/xcode/">Xcode</a> and the necessary SDK for development (gcc, various tools, libraries, etc).</p>
<pre>
git clone git://github.com/ariya/phantomjs.git
cd phantomjs
git checkout 1.9
./build.sh
</pre>
<p>This produces a static build <code>bin/phantomjs</code>. This is a self-contained executable, it can be moved to a different directory or another machine.</p>
<h2 id="linux">Linux</h2>
<p>For Ubuntu Linux (tested on a barebone install of Ubuntu 10.04 Lucid Lynx, Ubuntu 11.04 Natty Narwhal, Ubuntu 12.04 Precise Pangolin):</p>
<pre>
sudo apt-get update
sudo apt-get install build-essential chrpath git-core libssl-dev libfontconfig1-dev
git clone git://github.com/ariya/phantomjs.git
cd phantomjs
git checkout 1.9
./build.sh
</pre>
<p>For Amazon EC2 AMI (release 2011.09, 2012.03) and CentOS/RHEL 6:</p>
<pre>
sudo yum install gcc gcc-c++ make git openssl-devel freetype-devel fontconfig-devel
git clone git://github.com/ariya/phantomjs.git
cd phantomjs
git checkout 1.9
./build.sh
</pre>
<p><strong>Note 1</strong>: <code>build.sh</code> by default will launch parallel compile jobs depending on the available CPU cores, e.g. 4 jobs on a modern hyperthreaded dual-core processor. If necessary, e.g. when building on a virtual machine/server or other limited environment, reduce the jobs by passing a number, e.g <code>./build.sh --jobs 1</code> to set only one compile job at a time.</p>
<p><strong>Note 2</strong>: To create an RPM package (EC2 AMI, CentOS, or RHEL), make sure <code>rpm-build</code> package is installed and then
run the following <em>after</em> a successful build:</p>
<pre>
cd rpm
./mkrpm.sh phantomjs
</pre>
<p><strong>Note 3</strong>: Compile time for Ubuntu 12.04 running on Amazon EC2 <em>M1 Extra Large</em> (m1.xlarge, 4 cores): 20 minutes, <em>M1 Large</em> (m1.large, 2 cores): 50 minutes, <em>M1 Medium</em> (m1.medium, 1 core): 100 minutes.</p>
<h2 id="windows">Windows</h2>
<p>Install <a href="http://www.microsoft.com/visualstudio/">Microsoft Visual C++</a>, either version 2010 or 2008 (the <a href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express">Express edition</a> should work just fine).</p>
<p>First step is to build OpenSSL static library. Go to <a href="http://www.openssl.org/source/">openssl.org/source</a> and download the source package (tested with version 1.0.1). Unpack the package to a working directory, e.g. <code>C:\openssl</code>. Configure and build OpenSSL:</p>
<pre>
perl Configure VC-WIN32 no-asm --prefix=C:\openssl
ms\do_ms
nmake -f ms\nt.mak install
</pre>
<p>Get PhantomJS source code:</p>
<pre>
git clone git://github.com/ariya/phantomjs.git
cd phantomjs
git checkout 1.9
</pre>
<p>Edit file <code>src\qt\preconfig.cmd</code> and change OPEN_SSL_DIR variable to point to the OpenSSL working directory.</p>
<p>Finally, compile PhantomJS:</p>
<pre>
cd src\qt
preconfig.cmd
cd ..\..
src\qt\bin\qmake -r
nmake
</pre>
<p>This produces a static build <code>bin/phantomjs.exe</code>. This is a self-contained executable, it can be moved to a different directory or another machine.</p>
</div>
</div>
<div id="footer">
<div id="footer-content" class="container_12">
<p>
&copy; Copyright 2010-2013 <a href="http://twitter.com/AriyaHidayat">Ariya Hidayat</a> &mdash; Website design by <a href="http://svay.com/">Maurice Svay</a>
</p>
</div>
</div>
</body>
</html>

View File

@ -1,90 +0,0 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<title>PhantomJS: Contribution Guide</title>
<meta name="description" content="">
<meta name="author" content="">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta http-equiv="refresh" content="0;URL='https://github.com/ariya/phantomjs/blob/master/CONTRIBUTING.md'">
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="screen.min.css">
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-21665893-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<style>
#description p {
line-height: 125%;
text-align: left;
margin-bottom: 10px;
margin-top: 10px;
}
#description h2 {
text-align: left;
margin: 0.8em 0;
}
#description pre {
margin-left: 1em;
}
#description ul {
list-style-type: disc;
margin-left: 1em;
}
#description li {
margin-left: 1em;
}
</style>
</head>
<body>
<div id="intro">
<div id="header" class="container_12">
<a href="index.html" class="grid_4 alpha"><img src="images/phantomjs-logo.png" alt="PhantomJS" id="logo" width="240" height="80"></a>
<ul id="nav" class="grid_8 omega">
<li><a href="https://github.com/ariya/phantomjs">Source Code</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki">Documentation</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/API-Reference">API</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/Examples">Examples</a></li>
<li><a href="faq.html">FAQ</a></li>
</ul>
</div>
<div id="introduction" class="container_12">
<div class="grid_7 alpha">
<h1>Contribution Guide</h1>
</div>
</div>
</div>
<div id="description" class="container_12">
<div class="grid_10">
<p>The content of this page is moved to <a href="https://github.com/ariya/phantomjs/blob/master/CONTRIBUTING.md">Contributing Guide</a>.</p>
</div>
</div>
<div id="footer">
<div id="footer-content" class="container_12">
<p>
&copy; Copyright 2010-2013 <a href="http://twitter.com/AriyaHidayat">Ariya Hidayat</a> &mdash; Website design by <a href="http://svay.com/">Maurice Svay</a>
</p>
</div>
</div>
</body>
</html>

View File

@ -1,101 +0,0 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<title>PhantomJS: Download and Install</title>
<meta name="description" content="">
<meta name="author" content="">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="screen.min.css">
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-21665893-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<style>
#description p {
line-height: 125%;
text-align: left;
margin-bottom: 10px;
margin-top: 10px;
}
#description h2 {
text-align: left;
margin: 0.8em 0;
}
</style>
</head>
<body>
<div id="intro">
<div id="header" class="container_12">
<a href="index.html" class="grid_4 alpha"><img src="images/phantomjs-logo.png" alt="PhantomJS" id="logo" width="240" height="80"></a>
<ul id="nav" class="grid_8 omega">
<li><a href="https://github.com/ariya/phantomjs">Source Code</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki">Documentation</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/API-Reference">API</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/Examples">Examples</a></li>
<li><a href="faq.html">FAQ</a></li>
</ul>
</div>
<div id="introduction" class="container_12">
<div class="grid_7 alpha">
<h1>Download</h1>
</div>
</div>
</div>
<div id="description" class="container_12">
<div class="grid_10">
<p><strong>Note</strong> Binary packages are made available on a volunteer basis. There is no need to
ask when a binary package for a given platform will be ready. The packagers are fully aware of every source release and they give their best effort to make the binaries available.</p>
<p>Download service is kindly provided by <a href="http://code.google.com/p/phantomjs/downloads/">Google Code Project Hosting</a>.</p>
<h2 id="windows">Windows</h2>
<p>Download <a href="https://phantomjs.googlecode.com/files/phantomjs-1.9.2-windows.zip">phantomjs-1.9.2-windows.zip</a> (6.8 MB) and extract (unzip) the content.</p>
<p>The executable <code>phantomjs.exe</code> is ready to use.</p>
<p><strong>Note</strong>: For this static build, the binary is self-contained with no external dependency. It will run on a fresh install of Windows XP or later versions. There is no requirement to install Qt, WebKit, or any other libraries.</p>
<h2 id="mac">Mac OS X</h2>
<p>Download <a href="https://phantomjs.googlecode.com/files/phantomjs-1.9.2-macosx.zip">phantomjs-1.9.2-macosx.zip</a> (9.1 MB) and extract (unzip) the content.</p>
<p>The binary <code>bin/phantomjs</code> is ready to use.</p>
<p><strong>Note</strong>: For this static build, the binary is self-contained with no external dependency. It will run on a fresh install of Snow Leopard or later versions. There is no requirement to install Qt or any other libraries.</p>
<p><strong>Alternative</strong> installation using Homebrew:</p>
<pre>brew update &amp;&amp; brew install phantomjs</pre>
<p><strong>Warning</strong>: MacPorts does not have updated PhantomJS build yet. Installing via MacPorts is not recommended.</p>
<h2 id="linux">Linux</h2>
<p>For 64-bit system, download <a href="https://phantomjs.googlecode.com/files/phantomjs-1.9.2-linux-x86_64.tar.bz2">phantomjs-1.9.2-linux-x86_64.tar.bz2</a> (12.7 MB).</p>
<p>For 32-bit system, download <a href="https://phantomjs.googlecode.com/files/phantomjs-1.9.2-linux-i686.tar.bz2">phantomjs-1.9.2-linux-i686.tar.bz2</a> (13.0 MB).</p>
<p>This package is built on CentOS 5.8. It should run successfully on Lucid or more modern systems (including other distributions). There is no requirement to install Qt, WebKit, or any other libraries. It is however expected that some base libraries necessary for rendering (<a href="http://www.freetype.org/">FreeType</a>, <a href="http://www.freedesktop.org/wiki/Software/fontconfig">Fontconfig</a>) and the basic font files are available in the system.</p>
<p>For older systems, please compile PhantomJS from source (see below).</p>
<h2 id="source">Source Code</h2>
<p>Download <a href="https://phantomjs.googlecode.com/files/phantomjs-1.9.2-source.zip">phantomjs-1.9.2-source.zip</a> (39 MB) and follow the <a href="build.html">build instructions</a>.</p>
</div>
</div>
<div id="footer">
<div id="footer-content" class="container_12">
<p>
&copy; Copyright 2010-2013 <a href="http://twitter.com/AriyaHidayat">Ariya Hidayat</a> &mdash; Website design by <a href="http://svay.com/">Maurice Svay</a>
</p>
</div>
</div>
</body>
</html>

168
faq.html
View File

@ -1,168 +0,0 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<title>PhantomJS: FAQ</title>
<meta name="description" content="">
<meta name="author" content="">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="screen.min.css">
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-21665893-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<style>
#description p {
line-height: 125%;
text-align: left;
margin-bottom: 10px;
margin-top: 10px;
}
</style>
</head>
<body>
<div id="intro">
<div id="header" class="container_12">
<a href="index.html" class="grid_4 alpha"><img src="images/phantomjs-logo.png" alt="PhantomJS" id="logo" width="240" height="80"></a>
<ul id="nav" class="grid_8 omega">
<li><a href="https://github.com/ariya/phantomjs">Source Code</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki">Documentation</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/API-Reference">API</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/Examples">Examples</a></li>
<li><a href="faq.html">FAQ</a></li>
</ul>
</div>
<div id="introduction" class="container_12">
<div class="grid_7 alpha">
<h1>FAQ</h1>
</div>
</div>
</div>
<div id="description" class="container_12">
<div class="grid_10">
<p><strong>Q: Why there is no binary package or installer for &lt;insert your
favorite OS&gt;?</strong></p>
<p>A: <a href="download.html">Binary packages</a>, executables, and installer are provided on a volunteer basis.
They may appear later, or they may not exist at all. We are a very small team and we
can't afford to produce all possible combinations of packages for the different
platforms and operating systems out there.</p>
<p><strong>Q: Why does building PhantomJS take a long time?</strong></p>
<p>A: Because PhantomJS build workflow bundles the WebKit module, it needs to compile
thousands of source files. Using the binary package is highly recommended.
It is fast to download and <a href="download.html">easy to install</a>.</p>
<p><strong>Q: Can you give a time estimate of the availability of feature X?</strong></p>
<p>Because nobody is working full time on PhantomJS, there is no way to
predict the exact timing of the completion of a particular feature.
Every contributor to PhantomJS works on his own pace, sometimes it can
take a few release cycles until a certain feature is shipped.</p>
<p><strong>Q: Is there any update on issue XYZ??</strong></p>
<p>Any progress related to an issue, whether it is a change in the plan
or an implementation check-in, will be always posted to the issue
page. This is part of PhantomJS contribution guide, it is essential to
the development workflow. If an issue hasn't received any new update
for a while, a question like "Is there any update?" has an obvious
answer.</p>
<p><strong>Q: Why do I get build failure with PhantomJS 1.5 after successfully
compiled 1.4?</strong></p>
<p>A: PhantomJS has a completely different build workflow in version 1.5 compared to
its previous versions (read <a href=
"http://ariya.ofilabs.com/2012/03/the-evolution-of-phantomjs-build-workflow.html"
rel="nofollow">the details</a>). If the working directory still has some left-over
from 1.4 build process, there will be a compile error, such as:</p>
<pre>phantom.cpp:305: error: no matching function for call to 'QWebFrame::evaluateJavaScript(QString, QString)</pre>
<p>The solution is to completely clean the directory from old build files. The
recommended way is to run <tt>git clean -xfd</tt> from the top-level.
<strong>Warning</strong>: this will remove everything not stored in the Git
repository database (read Git documentation for more info). Please back-up any files
appropriately.</p>
<p>After that, run the build script again.</p>
<p><strong>Q: Why do I get the error message <tt>phantomjs: cannot connect to X
server</tt>?</strong></p>
<p>A: In PhantomJS 1.4 or earlier, X server is still needed. The workaround is to use Xvfb.
Starting with PhantomJS 1.5, it is <strong>pure headless</strong> and there is no need to
run X11/Xvfb anymore.</p>
<p><strong>Q: Which WebKit version is used by PhantomJS?</strong></p>
<p>A: If you want to know HTML5/CSS3/other features supported by PhantomJS, using
WebKit version is not a good idea. See <a href=
"http://code.google.com/p/phantomjs/wiki/SupportedFeatures">Supported Features</a> wiki page for
details.</p>
<p>If you really like to get the WebKit version, find it via the user agent, run the
<tt>examples/useragent.js</tt>. The actual version depends on the libraries with
which PhantomJS was compiled.</p>
<p><strong>Q: Why is PhantomJS not written as Node.js module?</strong></p>
<p>A: The short answer: "No one can serve two masters."</p>
<p>A longer explanation is as follows.</p>
<p>As of now, it is technically very challenging to do so.</p>
<p>Every Node.js module is essentially "a slave" to the core of Node.js, i.e. "the
master". In its current state, PhantomJS (and its included WebKit) needs to have the
full control (in a synchronous matter) over everything: event loop, network stack,
and JavaScript execution.</p>
<p>If the intention is just about using PhantomJS right from a script running within
Node.js, such a "loose binding" can be achieved by launching a PhantomJS process and
interact with it.</p>
<p><strong>Q: When using <tt>render()</tt>, why is the background
transparent?</strong></p>
<p>A: PhantomJS does not set the background color of the web page at all, it is left
to the page to decide its background color. If the page does not set anything, then
it remains transparent.</p>
<p>To set an initial background color for a web page, use the following trick:</p>
<pre>
page.evaluate(function() {
document.body.bgColor = 'white';
});</pre>
</div>
</div>
<div id="footer">
<div id="footer-content" class="container_12">
<p>
&copy; Copyright 2010-2013 <a href="http://twitter.com/AriyaHidayat">Ariya Hidayat</a> &mdash; Website design by <a href="http://svay.com/">Maurice Svay</a>
</p>
</div>
</div>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 612 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 624 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 346 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 237 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 141 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 B

View File

@ -1,28 +0,0 @@
var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;
(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a=
[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c<
f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&&
(j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r=
{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length,
t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b===
"string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m),
l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,
q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/,
q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g,
"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a),
a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e}
for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value",
m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m=
a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue=
j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],
H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+
I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),
["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",
/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),
["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes",
hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b=
!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m,
250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",
PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})();

View File

@ -1 +0,0 @@
.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}

View File

@ -1,135 +0,0 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<title>PhantomJS 1.1 Release Notes</title>
<meta name="description" content="">
<meta name="author" content="">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="screen.min.css">
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-21665893-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<style>
#description p {
line-height: 125%;
text-align: left;
margin-bottom: 10px;
margin-top: 10px;
}
#description h2 {
text-align: left;
margin: 0.8em 0;
font-size: 150%;
}
#description pre {
margin-left: 2em;
}
#description ul {
line-height: 125%;
list-style-type: disc;
margin-left: 1em;
margin-bottom: 1em;
}
#description li {
margin-left: 1em;
}
</style>
</head>
<body>
<div id="intro">
<div id="header" class="container_12">
<a href="index.html" class="grid_4 alpha"><img src="images/phantomjs-logo.png" alt="PhantomJS" id="logo" width="240" height="80"></a>
<ul id="nav" class="grid_8 omega">
<li><a href="https://github.com/ariya/phantomjs">Source Code</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki">Documentation</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/API-Reference">API</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/Examples">Examples</a></li>
<li><a href="faq.html">FAQ</a></li>
</ul>
</div>
<div id="introduction" class="container_12">
<div class="grid_7 alpha">
<h1>PhantomJS 1.1 Release Notes</h1>
</div>
</div>
</div>
<div id="description" class="container_12">
<div class="grid_10">
<p>PhantomJS 1.1, <em><a href="release-names.html">Cherry Blossom</a></em>, was released on April 27, 2011. This release is a minor update and all existing scripts should still work.</p>
<p>Some highlights of this release:</p>
<ul>
<li>Support for file upload, network proxy, disk cache, and GIF rasterization output
<li>Scripts can be written in CoffeeScript
<li>Another implementation of PhantomJS using Python (via PyQt)
</ul>
The complete changes are as follows.
<p><strong>Bug fixes:</strong></p>
<ul>
<li>Fixed the script loading to use UTF-8 encoding
<li>Fixed building with Cygwin and Qt 4.5
<li>Fixed issue #20 : problem with JPG transparent color
<li>Fixed issue #9 : ignore first line starting with #!
<li>Fixed issue #7 : support for file upload for form submission
<li>Fixed issue #35 : support for disabling images loading
<li>Fixed issue #14 : enable or disable plugins
<li>Fixed issue #19 : option for setting the proxy
<li>Fixed issue #17 : Specify paper size for PDF export
<li>Fixed issue #60 : Win32 and OS/2 icon files
<li>Fixed issue #93 : Build with Qt &lt; 4.7
</ul>
<p><strong>New features:</strong></p>
<ul>
<li>Added check for system proxy setting</li>
<li>Added support for rasterizing as GIF image</li>
<li>Added support for CoffeeScript</li
<li>Python implementation using PyQt</li>
<li>Added clipping rectangle to the render function</li>
<li>Added command line option to use disk cache</li>
</ul>
<p><strong>Examples:</strong></p>
<ul><li>Added a new example: driver for QUnit tests </li><li>Added a new example: using Canvas to produce the color wheel </li><li>Added an example on sychronous waiting </li><li>Added text extracting example </li><li>Ported all examples to CoffeeScript </li></ul>
<p>Back to <a href="releases.html">all releases</a>.</p>
</div>
</div>
<div id="footer">
<div id="footer-content" class="container_12">
<p>
&copy; Copyright 2010-2013 <a href="http://twitter.com/AriyaHidayat">Ariya Hidayat</a> &mdash; Website design by <a href="http://svay.com/">Maurice Svay</a>
</p>
</div>
</div>
</body>
</html>

View File

@ -1,279 +0,0 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<title>PhantomJS 1.2 Release Notes</title>
<meta name="description" content="">
<meta name="author" content="">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="screen.min.css">
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-21665893-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<style>
#description p {
line-height: 125%;
text-align: left;
margin-bottom: 10px;
margin-top: 10px;
}
#description h2 {
text-align: left;
margin: 0.8em 0;
font-size: 150%;
}
#description pre {
margin-left: 2em;
}
#description ul {
line-height: 125%;
list-style-type: disc;
margin-left: 1em;
margin-bottom: 1em;
}
#description li {
margin-left: 1em;
}
</style>
</head>
<body>
<div id="intro">
<div id="header" class="container_12">
<a href="index.html" class="grid_4 alpha"><img src="images/phantomjs-logo.png" alt="PhantomJS" id="logo" width="240" height="80"></a>
<ul id="nav" class="grid_8 omega">
<li><a href="https://github.com/ariya/phantomjs">Source Code</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki">Documentation</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/API-Reference">API</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/Examples">Examples</a></li>
<li><a href="faq.html">FAQ</a></li>
</ul>
</div>
<div id="introduction" class="container_12">
<div class="grid_7 alpha">
<h1>PhantomJS 1.2 Release Notes</h1>
</div>
</div>
</div>
<div id="description" class="container_12">
<div class="grid_10">
<p>PhantomJS 1.2, <em><a href="release-names.html">Birds of Paradise</a></em>, was released on June 21, 2011. It is a major update, it introduces a whole set of new API. It is not compatible with the previous version. For porting existing scripts into the new API, follow the description below.</p>
<p><strong>WebPage object</strong></p>
<p>In order to improve the security aspect (see issue 41), PhantomJS scripts will not run in the context of web page execution. This means, there is no way for malicious scripts to detect the presence of 'phantom' object and exploits its API.
<p>The "sandboxing" is achieved via a new WebPage object. It is an encapsulation of a web page. A specific URL can be loaded using its open() function. A typical usage is:</p>
<pre>
var page = new WebPage();
page.open(url, function (status) {
// do something
});
</pre>
<p>The callback in the open() is executed when the page loading is completed, with status equals to "success" if there is no error and "failed" is error has occurred.</p>
<p>The above construct is a convenient version of the following:</p>
<pre>
var page = new WebPage();
page.onLoadFinished = function (status) {
// do something
};
page.open(url);
</pre>
<p>Beside onLoadFinished, there is also onLoadStarted which is invoked when page loading starts for the first time:</p>
<pre>
var page = new WebPage();
page.onLoadStarted = function () {
console.log('Start loading...');
};
page.onLoadFinished = function (status) {
console.log('Loading finished.');
};
page.open(url);
</pre>
<p><strong>Page settings</strong></p>
<p>The behavior of the web page can be set via its settings object, with the following properties:</p>
<ul>
<li>loadImages defines whether to load inline images or not (default to true)
<li>loadPlugins defines whether to load plugins (Flash, Silverlight, ...) or not (default to false)
<li>userAgent defines the user agent string passed to the server
</ul>
<p>As an example, here is how to change the user agent:</p>
<pre>
var page = new WebPage();
page.settings.userAgent = 'Dragonless Phantom';
page.open(url, function (status) {
// do something
});
</pre>
<p><strong>Rasterization</strong></p>
<p>A web page can be rasterized to an image or a PDF file using render() function.</p>
<p>This rasterize.js is all it takes to capture a web site.</p>
<pre>
var page = new WebPage(),
address, output, size;
if (phantom.args.length &lt; 2 || phantom.args.length &gt; 3) {
console.log('Usage: rasterize.js URL filename');
phantom.exit();
} else {
address = phantom.args[0];
output = phantom.args[1];
page.viewportSize = { width: 600, height: 600 };
page.open(address, function (status) {
if (status !== 'success') {
console.log('Unable to load the address!');
} else {
window.setTimeout(function () {
page.render(output);
phantom.exit();
}, 200);
}
});
}
</pre>
<p><strong>Network traffic</strong></p>
<p>All the resource requests and responses can be sniffed using the onResourceRequested and onResourceReceived. An example to dump everything is:</p>
<pre>
var page = new WebPage();
page.onResourceRequested = function (request) {
console.log('Request ' + JSON.stringify(request, undefined, 4));
};
page.onResourceReceived = function (response) {
console.log('Receive ' + JSON.stringify(response, undefined, 4));
};
page.open(url);
</pre>
<p>The included examples/netsniff.js shows how to capture and process all the resource requests and responses and export the result in <a href="http://groups.google.com/group/http-archive-specification?hl=en">HAR format</a>.</p>
<p>The following shows the waterfall diagram obtained from BBC website:</p>
<p><img src="https://lh6.googleusercontent.com/-xoooH5EB6EE/TgnyJ3r9sRI/AAAAAAAAB98/wYJ_VoWED34/s640/bbc-har.png"/></p>
<p><strong>JavaScript evaluation</strong></p>
<p>To evaluate JavaScript code in the context of the web page, use evaluate() function. The execution is sandboxed, there is no way for the code to access any JavaScript objects and variables outside its own page context. An object can be returned from evaluate(), however it is limited to simple objects and can't contain functions or closures.</p>
<p>Here is an example to show the title of a web page:</p>
<pre>
var page = new WebPage();
page.open(url, function (status) {
var title = page.evaluate(function () {
return document.title;
});
console.log('Page title is ' + title);
});
</pre>
<p>Any console message from a web page, including from the code inside evaluate(), will not be displayed by default. To override this behavior, use the onConsoleMessage callback. The previous example can be rewritten to:</p>
<pre>
var page = new WebPage();
page.onConsoleMessage = function (msg) {
console.log('Page title is ' + msg);
};
page.open(url, function (status) {
page.evaluate(function () {
console.log(document.title);
});
});
</pre>
<p>To inject external code, use injectJs function passing the file name containing the code to be loaded. If the file can not be found in the current directory, it will be searched in the path specified in the libraryPath property. Both phantom and WebPage object have injectJs function.</p>
<p>To load external JavaScript library, includeJs is very useful. It behaves like the well-known dynamic script loading technique. An example:</p>
<pre>
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
// jQuery is loaded, now manipulate the DOM
});
</pre>
<p><strong>Bug fixes</strong></p>
<ul>
<li>Fixed rendering a very large web page (issue 54)
<li>Fixed reporting of CoffeeScript compile error (issue 125)
</ul>
<p><strong>New features</strong></p>
<ul>
<li>Added callback for console message (issue 12)
<li>Improved security model via WebPage object (issue 41)
<li>Added support for POST, HEAD, PUT, and DELETE (issue 88)
<li>Scripts filename is now passed as phantom.scriptName
<li>Added callback to capture resource requests and responses (issue 2)
<li>Added the ability to load external JavaScript (issue 32)
</ul>
<p><strong>Examples</strong></p>
<ul>
<li>Ported examples to use WebPage object
<li>Added a new example to upload an image to imagebin.org
<li>Added a new example to show HTTP POST feature
<li>Added a new example to sniff network traffic and save it in HAR format
</ul>
<p>Back to <a href="releases.html">all releases</a>.</p>
</div>
</div>
<div id="footer">
<div id="footer-content" class="container_12">
<p>
&copy; Copyright 2010-2013 <a href="http://twitter.com/AriyaHidayat">Ariya Hidayat</a> &mdash; Website design by <a href="http://svay.com/">Maurice Svay</a>
</p>
</div>
</div>
</body>
</html>

View File

@ -1,355 +0,0 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<title>PhantomJS 1.3 Release Notes</title>
<meta name="description" content="">
<meta name="author" content="">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="screen.min.css">
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-21665893-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<style>
#description p {
line-height: 125%;
text-align: left;
margin-bottom: 10px;
margin-top: 10px;
}
#description h2 {
text-align: left;
margin: 0.8em 0;
font-size: 150%;
}
#description pre {
margin-left: 2em;
}
#description ul {
line-height: 125%;
list-style-type: disc;
margin-left: 1em;
margin-bottom: 1em;
}
#description li {
margin-left: 1em;
}
</style>
</head>
<body>
<div id="intro">
<div id="header" class="container_12">
<a href="index.html" class="grid_4 alpha"><img src="images/phantomjs-logo.png" alt="PhantomJS" id="logo" width="240" height="80"></a>
<ul id="nav" class="grid_8 omega">
<li><a href="https://github.com/ariya/phantomjs">Source Code</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki">Documentation</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/API-Reference">API</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/Examples">Examples</a></li>
<li><a href="faq.html">FAQ</a></li>
</ul>
</div>
<div id="introduction" class="container_12">
<div class="grid_7 alpha">
<h1>PhantomJS 1.3 Release Notes</h1>
</div>
</div>
</div>
<div id="description" class="container_12">
<div class="grid_10">
<p>PhantomJS 1.3, <em><a href="release-names.html">Water Lily</a></em>, was released on September 23, 2011. It is a minor update, mostly bug fixes and few additional new features.</p>
<p>This version is backward compatible with version 1.2. Existing scripts should work without any modification.</p>
<p>Minimum requirement to build PhantomJS 1.3 is Qt 4.6 or later. Latest stable release of Qt, i.e. version 4.7.4, is strongly recommended.</p>
<p><strong>Initial module support</strong></p>
<p>Module API modelled after CommonJS Modules is available, currently only supporting webpage and fs built-in modules.</p>
<p>For compatibility reason, WebPage object at the global scope is still available. It will be deprecated in some future release. The new recommended way to create a web page is as follows:</p>
<pre>
var page = require('webpage').create();
page.open(url, function (status) {
// do something
});
</pre>
<p><strong>WebPage object improvement</strong></p>
<p>WebPage object wraps a native object that represents the web page. Because of technical limitation, a WebPage object can not be properly garbage collected and freed from the memory. To prevent increasing heap usage when create a lot of WebPage objects, use the new release() function, as in this example:</p>
<pre>
var page = require('webpage').create();
page.open(url, function (status) {
// do something
// ....
// finish
page.release();
});
</pre>
<p>A new callback onInitialized can be used to modify the global objects before a page is loaded. In the following example, further calls to Math.random() effectively will always return the specified constant.</p>
<pre>
page.onInitialized = function() {
Math.random = function() {
return 42;
};
};
</pre>
<p>Related to page rasterization using render() function, it is now possible to control the physical scroll offset of the web page using the new property of WebPage called scrollPosition, as illustrated below:
<pre>
page.scrollPosition = { top: 100, left: 0 };
page.render('output.png');
</pre>
<p>There is now a convenient way to create a new page by passing an option the constructor:
<pre>
var page = new WebPage({
onConsoleMessage: function (msg) {
console.log(msg);
},
settings: {
loadPlugins: false,
userAgent: 'Dragonless Phantom'
},
viewportSize: {
width: 800,
height: 600
}
});
</pre>
<p><strong>Page settings</strong></p>
<p>The behavior of the web page can be further modified by the following new settings:</p>
<ul>
<li>javascriptEnabled defines whether to execute the script in the page or not (default to true)
<li>XSSAuditingEnabled defines whether load requests should be monitored for cross-site scripting attempts (default to false)
<li>localToRemoteUrlAccessEnabled defines whether local resource (e.g. from file) can access remote URLs or not (default to false)
<li>userName sets the user name used for HTTP authentication
<li>password sets the password used for HTTP authentication
</ul>
<p>Example usage:</p>
<pre>
var page = new WebPage();
page.settings.javascriptEnabled = true;
page.settings.XSSAuditingEnabled = true;
page.settings.localToRemoteUrlAccessEnabled = true;
page.open(url, function (status) {
// do something
});
</pre>
<p><strong>Mouse events</strong></p>
<p>Mouse events can be sent to the page using the new sendEvent function, like in the following examples:</p>
<pre>
page.sendEvent('mousedown', 45, 50);
</pre>
<p>The first argument is the event type. Other available types are mouseup, mousemove, and click. The next two arguments represents the mouse position.</p>
<p>As of now, left button is the only pressed button for the event. For mousemove however, there is no button pressed (i.e. it is not dragging).</p>
<p>The events are not like synthetic DOM events. Each event is sent to the web page as if it comes as part of user interaction.</p>
<p><strong>File system access</strong></p>
<p>A set of API functions is available to access files and directories. They are modelled after CommonJS Filesystem proposal.
<p>To start using, it needs to be instantiated via the fs module such as:
<pre>
var fs = require('fs');
</pre>
<p>Read-only properties:</p>
<ul>
<li>separator is the path separator (forward slash or backslash, depending on the operating system).
<li>workingDirectory is the current working directory.
</ul>
<p>Query functions:</p>
<ul>
<li>list(path) returns the list of all the names of all the files in a specified path.
<li>absolute(path) returns the absolute path starting from the root file system, resolved from the current working directory.
<li>exists(path) returns true if a file or a directory exists.
<li>isDirectory(path) returns true if the specified path is a directory.
<li>isFile(path) returns true if the specified path is a file.
<li>isAbsolute(path) returns true if the specified path is an absolute path.
<li>isExecutable(path) returns true if the specified file can be executed.
<li>isReadable(path) returns true if a file or a directory is readable.
<li>isWritable(path) returns true if a file or a directory is writeable.
<li>isLink(path) returns true if the specified path is a symbolic link.
</ul>
<p>Directory-related functions:</p>
<ul>
<li>changeWorkingDirectory(path) changes the current working directory to the specified path.
<li>makeDirectory(path) creates a new directory.
<li>makeTree(path) creates a directory including any missing parent directories.
<li>removeDirectory(path) removes a directory if it is empty
<li>removeTree(path) removes the specified path, regardless of whether it is a file or a directory.
<li>copyTree(source, destination) copies the entire files from a source path to the destination path.
</ul>
<p>File-related functions:</p>
<ul>
<li>open(path, mode) returns a stream object representing the stream interface to the specified file (mode can be r for read, w for write, or a for append).
<li>read(path) returns the entire content of a file.
<li>write(path, content, mode) writes content to a file (mode can be w for write or a for append).
<li>size(path) returns the size (in bytes) of the file specified by the path.
<li>remove(path) removes the file specified by the path.
<li>copy(source, destination) copies a file to another.
<li>move(source, destination) movies a file to another, effectively renaming it.
<li>touch(path) touches a file (i.e. changes its access timestamp).
</ul>
<p>A stream object returned from the open() function has the following functions:
<ul>
<li>read returns the content of the stream.
<li>write(data) writes the string to the stream.
<li>readLine reads only a line from the stream and return it.
<li>writeLine(data) writes the data as a line to the stream.
<li>flush() flushes all pending input output.
<li>close() completes the stream operation.
</ul>
<p>As an example of file access API, the following function recursively traverses a directory and prints all the found entries:
<pre>
function scanDirectory(path) {
var fs = require('fs');
if (fs.exists(path) && fs.isFile(path)) {
console.log(path);
} else if (fs.isDirectory(path)) {
fs.list(path).forEach(function (e) {
if (e !== '.' && e !== '..') {
scanDirectory(path + '/' + e);
}
});
}
};
</pre>
<p><strong>Command-line options</strong></p>
<p>Newly available options are:</p>
<ul>
<li>--max-disk-cache-size=size limits the size of disk cache (in KB)
<li>--output-encoding=encoding sets the encoding used for terminal output (default is utf8).
<li>--script-encoding=encoding sets the encoding used for the starting script (default is utf8).
<li>--local-to-remote-url-access=[yes|no] allows local content to access remote URL (default is no).
<li>--ignore-ssl-errors=[yes|no] ignores SSL errors, such as expired or self-signed certificate errors (default is no).
<li>--cookies-file=/path/to/cookies.txt specifies the file name to store the persistent cookies.
</ul>
<p>Rather than passing all options in the command-line, it is also possible to store the options in a file using JavaScript Object Notation (JSON) and then tell PhantomJS to read it:</p>
<pre>phantomjs --config=/path/to/config.json script.js arg1 arg2 arg3</pre>
<p>where the contents of config.json looks like:</p>
<pre>
{
'ignoreSslErrors': true,
'localToRemoteUrlAccessEnabled': true
}
</pre>
<p><strong>Platform-specific</strong></p>
<p>Mac OS X: There is no more application bundle, the executable is bin/phantomjs and not bin/phantomjs.app/Contents/MacOS/phantomjs anymore.</p>
<p><strong>Bug fixes</strong></p>
<ul>
<li>Fixed open() and POST method, without specifying the finished handler
<li>Fixed script execution warning dialog (issue 165)
<li>Added WebPage.release() to free the web page from memory (issue 154)
<li>Added special handling of about:blank (issue 235)
<li>Made a separate network access manager for each page (issue 190)
</ul>
<p><strong>New features</strong></p>
<ul>
<li>Introduced file system API based on CommonJS Filesystem proposal (issue 129)
<li>Added support for persistent cookies (issue 91)
<li>Added event handling, currently only for mouse events (issue 234)
<li>Added page scroll position (issue 162)
<li>Added HTTP authentication support (issue 45)
<li>Added callback for page initialization (issue 143)
<li>Added support to specify script and output encoding (issue 186)
<li>Added option to allow local content to do cross-domain access (issue 28)
<li>Added support to apply configurations from a JSON file (issue 180)
<li>Added a convenient WebPage initialization construction (issue 206)
<li>Added option to limit the size of disk cache (issue 220)
</ul>
<p><strong>Examples</strong></p>
<ul>
<li>Added a new example on using Modernizr to detect features (issue 144)
<li>Fixed pizza.js example to use Mobile Yelp (issue 200)
<li>Fixed netsniff.coffee example due to wrong indentation (issue 225)
<li>Added an example to show live network traffic (issue 227)
<li>Added an example demonstrating different output encodings (issue 186)
</ul>
<p>Back to <a href="releases.html">all releases</a>.</p>
</div>
</div>
<div id="footer">
<div id="footer-content" class="container_12">
<p>
&copy; Copyright 2010-2013 <a href="http://twitter.com/AriyaHidayat">Ariya Hidayat</a> &mdash; Website design by <a href="http://svay.com/">Maurice Svay</a>
</p>
</div>
</div>
</body>
</html>

View File

@ -1,168 +0,0 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<title>PhantomJS 1.4 Release Notes</title>
<meta name="description" content="">
<meta name="author" content="">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="screen.min.css">
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-21665893-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<style>
#description p {
line-height: 125%;
text-align: left;
margin-bottom: 10px;
margin-top: 10px;
}
#description h2 {
text-align: left;
margin: 0.8em 0;
font-size: 150%;
}
#description pre {
margin-left: 2em;
}
#description ul {
line-height: 125%;
list-style-type: disc;
margin-left: 1em;
margin-bottom: 1em;
}
#description li {
margin-left: 1em;
}
</style>
</head>
<body>
<div id="intro">
<div id="header" class="container_12">
<a href="index.html" class="grid_4 alpha"><img src="images/phantomjs-logo.png" alt="PhantomJS" id="logo" width="240" height="80"></a>
<ul id="nav" class="grid_8 omega">
<li><a href="https://github.com/ariya/phantomjs">Source Code</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki">Documentation</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/API-Reference">API</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/Examples">Examples</a></li>
<li><a href="faq.html">FAQ</a></li>
</ul>
</div>
<div id="introduction" class="container_12">
<div class="grid_7 alpha">
<h1>PhantomJS 1.4 Release Notes</h1>
</div>
</div>
</div>
<div id="description" class="container_12">
<div class="grid_10">
<p>PhantomJS 1.4, <em><a href="release-names.html">Glory of the Snow</a></em>, was released on December 22, 2011. It is a minor update, mostly bug fixes and one new major feature: WebServer module.</p>
<p>This version is backward compatible with version 1.3. Existing scripts should work without any modification.</p>
<p>Minimum requirement to build PhantomJS 1.3 is Qt 4.6 or later. Latest stable release of Qt, i.e. version 4.8.0, is strongly recommended.</p>
<p><strong>WebServer module</strong></p>
<p>Note: This WebServer module is intended for ease of communication between PhantomJS scripts and the outside world. It is not recommended to use it as a general production server.</p>
<p>By using the embedded web server module <a href="https://github.com/valenok/mongoose">Mongoose</a>, PhantomJS script can start a web server which listens to a particular port.</p>
<p>A very simple example is as follows. It always gives the same response for any request.</p>
<pre>var server, service;
server = require('webserver').create();
service = server.listen(8080, function (request, response) {
response.statusCode = 200;
response.write('<html><body>Hello!</body></html>');
});
</pre>
<p>The request object passed to the callback function may contain the following properties:</p>
<ul>
<li>method defines the request method (GET, POST, ...)
<li>url contains the complete request URL, including the query string (if any)
<li>httpVersion has the actual HTTP version
<li>headers stores all HTTP headers as key-value pair
</ul>
<p>The response object should be used to create the response:</p>
<ul>
<li>statusCode sets the returned status code
<li>write sends a chunk for the response body (it can be called multiple times).
</ul>
<p>This WebServer module is still rather simple in this version. Depending on the needs, the functionalities and the corresponding API will be expanded in the next versions.</p>
<p><strong>Static version build script</strong></p>
<p>For continuous integration server and various other uses cases, often it is desired to have a static version of PhantomJS which has almost zero dependencies. While building PhantomJS for the static build is not difficult, it is often a daunting task to figure out the bits and pieces necessary to achieve that build.</p>
<p>For convenience, now there are two build scripts, available in the deploy subdirectories, each for Linux and Mac. The script automatically downloads the source code of Qt, build everything locally, and then prepare the binary for deployment. There is no need to have Qt installed on the system before running the script.</p>
<p>The produced binary has very minimal dependencies and can be transferred to another machine easily. With the help of UPX (optional), the size of the binary is only about 10 MB.</p>
<p>Note: Even with the static build, as of now you still need to setup Xvfb for the Linux version. Also for Mac, don't forget the Info.plist file (see issue 281).</p>
<p><strong>New features</strong></p>
<ul>
<li>Added embedded HTTP server (issue 115)</li>
<li>Added convenient build script for Linux (issue 197)</li>
<li>Added support for SOCKS5 proxy (issue 266)</li>
<li>Updated CoffeeScript compiler to version 1.2 (issue 312)</li>
</ul>
<p><strong>Bug fixes</strong></p>
<ul>
<li>Fix potential crash in QUrl with Qt 4.8 (issue 304)</li>
<li>Fix bug in CookieJar with QSettings and string (PyPhantomJS issue 10)</li>
<li>Prevent showing the icon on Mac OS X Dock (issue 281)</li>
</ul>
<p><strong>Examples</strong></p>
<ul>
<li>Added a new example to detect browsers sniffing (issue 263)</li>
<li>Added HTTP server example (issue 115)</li>
</ul>
<p>Back to <a href="releases.html">all releases</a>.</p>
</div>
</div>
<div id="footer">
<div id="footer-content" class="container_12">
<p>
&copy; Copyright 2010-2013 <a href="http://twitter.com/AriyaHidayat">Ariya Hidayat</a> &mdash; Website design by <a href="http://svay.com/">Maurice Svay</a>
</p>
</div>
</div>
</body>
</html>

View File

@ -1,250 +0,0 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<title>PhantomJS 1.5 Release Notes</title>
<meta name="description" content="">
<meta name="author" content="">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="screen.min.css">
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-21665893-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<style>
#description p {
line-height: 125%;
text-align: left;
margin-bottom: 10px;
margin-top: 10px;
}
#description h2 {
text-align: left;
margin: 0.8em 0;
font-size: 150%;
}
#description pre {
margin-left: 2em;
}
#description ul {
line-height: 125%;
list-style-type: disc;
margin-left: 1em;
margin-bottom: 1em;
}
#description li {
margin-left: 1em;
}
</style>
</head>
<body>
<div id="intro">
<div id="header" class="container_12">
<a href="index.html" class="grid_4 alpha"><img src="images/phantomjs-logo.png" alt="PhantomJS" id="logo" width="240" height="80"></a>
<ul id="nav" class="grid_8 omega">
<li><a href="https://github.com/ariya/phantomjs">Source Code</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki">Documentation</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/API-Reference">API</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/Examples">Examples</a></li>
<li><a href="faq.html">FAQ</a></li>
</ul>
</div>
<div id="introduction" class="container_12">
<div class="grid_7 alpha">
<h1>PhantomJS 1.5 Release Notes</h1>
</div>
</div>
</div>
<div id="description" class="container_12">
<div class="grid_10">
<p>PhantomJS 1.5, <em><a href="release-names.html">Ghost Flower</a></em>, was released on March 20, 2012. This version is backward compatible with version 1.4. Existing scripts should work without any modification, unless there is a need to run Flash or other plugins (see below).</p>
<p>PyPhantomJS, the implementation of PhantomJS in Python with PyQt, ceased the development (issue 344) and thus the code has been removed from the repository.</p>
<p><strong>Pure headless (no X11) on Linux</strong></p>
<p>While it's always possible to customize the build of PhantomJS Linux without X11 (in particular since the last 1.4 release), it's a tedious adventure. Beginning from this release, X11-less setup is the standard when building PhantomJS Linux from source.</p>
<p>The benefits of pure headless are two-fold: no need to use Xvfb, it also compiles out-of-the-box on a barebone Linux server without GUI. This should make it easy to place PhantomJS in various continuous integration systems and cloud/elastic platforms.</p>
<p>Note that the pure headless mode does not compromise the functionalities and rendering quality. For screen capture, text rasterization is still done through FreeType and Fontconfig. Various formats (PNG, GIF, JPEG) for inlined images are still supported. Even producing PDF from the web page works just fine.</p>
<p><strong>No more support for Flash and other plugins</strong></p>
<p>Plugin support has been completely disabled (see issue 413) for the following reasons:</p>
<ul>
<li>Going pure headless without X11 means it is not possible to have native window handle for the plugin.</li>
<li>Flash apps should be tested by whatever tools Adobe provides to the developers.</li>
<li>Issues are reported but nobody volunteers to analyze or fix them.</li>
</ul>
<p>Future reported issues and bugs which relate to Flash and other plugins will be marked as WontFix.</p>
<p><strong>Improved troubleshooting</strong></p>
<p>To facilitates easier troubleshooting, there exists support for interactive mode (REPL), remote debugging, and error handling.</p>
<p>If PhantomJS is launched without any argument, it starts in the so-called interactive mode, also known for REPL (read-eval-print-loop). This mode allows a faster cycle of experiment and script prototyping. PhantomJS REPL supports the expected features: command editing, persistent history, and autocomplete (with Tab key).</p>
<p>Terminal line editing feature of this interactive mode is based on <a href="https://github.com/tadmarshall/linenoise">Linenoise</a> (an improved fork of the <a href="https://github.com/antirez/linenoise">original project</a>).</p>
<p>Remote debugging permits inspection of the script and web page via another WebKit-based browser (Safari and Chrome). This is achieved by launching PhantomJS with the new option, as in this example</p>
<pre>phantomjs --remote-debugger-port=9000 test.js</pre>
<p>After than, open Safari/Chrome and go to the http://ipaddress:9000. The browser will show the familiar Web Inspector interface which in this case works on the script being tested.</p>
<p>Note: As of now, remote debugging is only for Linux (see issue 430) .</p>
<p>To easily catch an error occured in a web page, whether it is a syntax error or other thrown exception, an onError handler for the WebPage object has been added. An example on such a handler is:</p>
<pre>
page.onError = function (msg, trace) {
console.log(msg);
trace.forEach(function(item) {
console.log(' ', item.file, ':', item.line);
})
}
</pre>
<p>Now if the page opens a site with some JavaScript? exceptions, a detailed information (including the stack trace) will be printed out.</p>
<p>Note: Further refinement to the stack trace is still being planned (see issue 166).</p>
<p><strong>System module</strong></p>
<p>A set of functions to access system-level functionalities is available, modelled after CommonJS System proposal.</p>
<p>To start using, it needs to be instantiated via the system module such as:</p>
<pre>var system = require('system');</pre>
<p>Read-only properties:</p>
<ul>
<li>platform is the name of the platform, always fixed as phantomjs.
</ul>
<p>Query functions:
<ul>
<li>env returns the list (as key value pair) of the environment variables.
<li>args returns the list of command-line arguments. The first one is always the script name, it is followed by the subsequent arguments.
</ul>
<p>An example printenv.js demonstrates the same functionality as in the Unix printenv utility:</p>
<pre>
var system = require('system'),
env = system.env,
key;
for (key in env) {
if (env.hasOwnProperty(key)) {
console.log(key + '=' + env[key]);
}
}
phantom.exit();
</pre>
<p>An example arguments.js prints all the command-line arguments:</p>
<pre>
var system = require('system');
if (system.args.length === 1) {
console.log('Try to pass some args when invoking this script!');
} else {
system.args.forEach(function (arg, i) {
console.log(i + ': ' + arg);
});
}
phantom.exit();
</pre>
<p>If the script is invoked:</p>
<pre>phantomjs arguments.js answer 42</pre>
<p>gives the following result:
<pre>
0: arguments.js
1: answer
2: 42
</pre>
<p><strong>Control web security</strong></p>
<p>Performing cross-domain XHR is often necessary for some scripting purposes. This is now possible by disabling web security (issue 28), either with --web-security=no command-line option or webSecurityEnabled page setting.</p>
<p>Note: Disabling web security may make the system more vulnerable to attacks and other malicious content. Use it with great caution.
<p>An example findads.js uses disabled web security to access the frame content from Google Ads server: https://gist.github.com/2037945.
<p><strong>New features</strong></p>
<ul>
<li>Added interactive mode, also known as REPL (issue 252)
<li>Added setting for web security, to allow cross domain XHR (issue 28)
<li>Added error handler for WebPage object (issue 166)
<li>Removed X11/Xlib requirement on Linux (issue 163)
<li>Added support for custom HTTP header in the network request (issue 77)
<li>Added support for read write encoding in the file system module (issue 367)
<li>Added remote debugging support on Linux (issue 6)
<li>Added support for proxy authentication (issue 105)
<li>Added System module, to retrieve environment variables (issue 271) and arguments (issue 276)
<li>Added fs.readLink function (issue 329)
<li>Added support for reading and writing binary data (issue 400)
<li>Added support to retrieve request data in the WebServer? module (issue 340)
<li>Added support for individual top/bottom/left/right print margins (issue 388)
<li>Added command-line option --help (issue 347)
<li>Added short command-line options -v and -h (issue 408)
<li>Removed support for Flash and other plugins (issue 418)
</ul>
<p><strong>Bug fixes</strong></p>
<ul>
<li>Fixed multiple console.log arguments (issue 36)
<li>Fixed file upload (issue 307)
<li>Fixed the web server instance to be asynchronous (issue 326) and still support Keep Alive (issue 416)
<li>Workaround Qt 4.8.0 crash due to empty URL scheme (issue 365)
<li>Fixed a Content-Type problem where POST does not work (issue 337)
<li>Fixed Jasmine test runner with Jasmine 1.1 (issue 402)
<li>Don't display debugging and warning messages (issue 323)
</ul>
<p>Back to <a href="releases.html">all releases</a>.</p>
</div>
</div>
<div id="footer">
<div id="footer-content" class="container_12">
<p>
&copy; Copyright 2010-2013 <a href="http://twitter.com/AriyaHidayat">Ariya Hidayat</a> &mdash; Website design by <a href="http://svay.com/">Maurice Svay</a>
</p>
</div>
</div>
</body>
</html>

View File

@ -1,176 +0,0 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<title>PhantomJS 1.6 Release Notes</title>
<meta name="description" content="">
<meta name="author" content="">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="screen.min.css">
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-21665893-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<style>
#description p {
line-height: 125%;
text-align: left;
margin-bottom: 10px;
margin-top: 10px;
}
#description h2 {
text-align: left;
margin: 0.8em 0;
font-size: 150%;
}
#description pre {
margin-left: 2em;
}
#description ul {
line-height: 125%;
list-style-type: disc;
margin-left: 1em;
margin-bottom: 1em;
}
#description li {
margin-left: 1em;
}
</style>
</head>
<body>
<div id="intro">
<div id="header" class="container_12">
<a href="index.html" class="grid_4 alpha"><img src="images/phantomjs-logo.png" alt="PhantomJS" id="logo" width="240" height="80"></a>
<ul id="nav" class="grid_8 omega">
<li><a href="https://github.com/ariya/phantomjs">Source Code</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki">Documentation</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/API-Reference">API</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/Examples">Examples</a></li>
<li><a href="faq.html">FAQ</a></li>
</ul>
</div>
<div id="introduction" class="container_12">
<div class="grid_7 alpha">
<h1>PhantomJS 1.6 Release Notes</h1>
</div>
</div>
</div>
<div id="description" class="container_12">
<div class="grid_10">
<p>PhantomJS 1.6, <em><a href="release-names.html">Lavender</a></em>, was released on June 20, 2012. It is a minor update, mostly bug fixes and some new API.</p>
<p>This version is backward compatible with version 1.5. Existing scripts should work without any modification.</p>
<p><strong>Improved support for rendering</strong></p>
<p>While it is always possible to capture the web page and render it as an image, it involves creating an external file to hold that image. With this version, the captured content can be retrieved as a string, base64-encoded using the new renderBase64(format) function.</p>
<p>The example will dump the base64-encoded rendering of the web page in PNG format (the default if no format is specified) to the terminal:</p>
<pre>
var page = require('webpage').create();
page.open('http://m.bing.com', function (status) {
console.log(page.renderBase64());
phantom.exit();
});
</pre>
<p>To facilitate creating thumbnail preview, scaling the screen capture is now possible via the new zoomFactor property. In this example, the BBC site is captured to an image at 25% zoom.</p>
<pre>
var page = require('webpage').create();
page.open('http://news.bbc.co.uk', function (status) {
page.zoomFactor = 0.25;
page.render('bbc.png');
phantom.exit();
});
</pre>
<p><strong>Better script evaluation</strong></p>
<p>Arguments can be passed to evaluate() function to run a script in the context of the web page.</p>
<p>In the following example, the text value of a DOM element is extracted. The element is chosen based on the selector which is passed to evaluate.</p>
<pre>
var page = require('webpage').create();
page.open('http://m.bing.com', function (status) {
var title = page.evaluate(function (s) {
return document.querySelector(s).innerText;
}, 'title');
console.log(title);
phantom.exit();
});
</pre>
<p>Evaluating a script asynchronously is now possible via the new evaluateAsync function. Unlike the standard evaluate, the function returns immediately and does not wait until the script execution finishes. Consequently there is no return value from this function.</p>
<p><strong>New features</strong></p>
<ul>
<li>Added support for passing arguments to WebPage's evaluate (issue 132)
<li>Added callbacks for JavaScript onConfirm and onPrompt (issue 133)
<li>Added stack trace when error occurs (issue 166)
<li>Added initial support for cookies handling (issue 354)
<li>Added support for header footer when printing the page (issue 410, 512)
<li>Added headers support in the loading request (issue 452)
<li>Added support to render the web page as base64-encoded string (issue 547)
<li>Added hooks for navigation event (issue 562)
<li>Added command-line option to show debug messages (issue 575)
<li>Added support for the zoom factor for web page rendering (issue 579)
<li>Added crash reporter for Mac OS X and Linux, based on Google Breakpad (issue 576)
<li>Added 'os' object to the system module (issue 585)
<li>Added support for asynchronous evaluation (issue 593)
</ul>
<p><strong>Improvements</strong></p>
<ul>
<li>Fixed remote debugging to work on Mac OS X and Windows (issue 430)
<li>Fixed web server getting the dropped connection for empty response (issue 451)
<li>Fixed text rendered as boxes (squares) on headless Linux (issue 460)
<li>Updated Qt to version 4.8.2 (issue 495)
<li>Updated CoffeeScript compiler to version 1.3.3 (issue 496)
<li>Fixed the build script to detect and use MAKEFLAGS (issue 503)
<li>Fixed the build script to properly pass Qt config flags (issue 507)
<li>Changed Info.plist to be embedded in Mac OS X executable (issue 528)
<li>Fixed wrong module require in the imagebin example (issue 536)
<li>Fixed example scripts to exit with the right exit code (issue 544)
<li>Fixed build failure with glib 2.31.0+ (issue 559)
<li>Fixed error handler failures in some cases (issue 589)
</ul>
<p>Back to <a href="releases.html">all releases</a>.</p>
</div>
</div>
<div id="footer">
<div id="footer-content" class="container_12">
<p>
&copy; Copyright 2010-2013 <a href="http://twitter.com/AriyaHidayat">Ariya Hidayat</a> &mdash; Website design by <a href="http://svay.com/">Maurice Svay</a>
</p>
</div>
</div>
</body>
</html>

View File

@ -1,191 +0,0 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<title>PhantomJS 1.7 Release Notes</title>
<meta name="description" content="">
<meta name="author" content="">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="screen.min.css">
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-21665893-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<link rel="stylesheet" type="text/css" href="prettify.css"/>
<link rel="stylesheet" type="text/css" href="snippet.css"/>
<script type="text/javascript" src="js/prettify.js"></script>
<style>
#description p {
line-height: 125%;
text-align: left;
margin-bottom: 10px;
margin-top: 10px;
}
#description h2 {
text-align: left;
margin: 0.8em 0;
font-size: 150%;
}
#description ul {
line-height: 125%;
list-style-type: disc;
margin-left: 1em;
margin-bottom: 1em;
}
#description li {
margin-left: 1em;
}
</style>
</head>
<body onload="prettyPrint()">
<div id="intro">
<div id="header" class="container_12">
<a href="index.html" class="grid_4 alpha"><img src="images/phantomjs-logo.png" alt="PhantomJS" id="logo" width="240" height="80"></a>
<ul id="nav" class="grid_8 omega">
<li><a href="https://github.com/ariya/phantomjs">Source Code</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki">Documentation</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/API-Reference">API</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/Examples">Examples</a></li>
<li><a href="faq.html">FAQ</a></li>
</ul>
</div>
<div id="introduction" class="container_12">
<div class="grid_7 alpha">
<h1>PhantomJS 1.7 Release Notes</h1>
</div>
</div>
</div>
<div id="description" class="container_12">
<div class="grid_10">
<p>PhantomJS 1.7, <em><a href="release-names.html">Blazing Star</a></em>, was released on September 22, 2012. It added module system support (modelled after CommonJS), better cookies handling, additional input events, and other small improvements.</p>
<p><strong>Module system</strong></p>
<p>There has been module system support for a while, however it works only for internal modules. In this release, that support is extended for generic module written in JavaScript or CoffeeScript. The construct for the module system is modelled after <a href="http://wiki.commonjs.org/wiki/Modules/1.1.1">CommonJS Modules 1.1</a>.</p>
<p>As an example, supposed there is a script <code>universe.js</code> which contains the following code:</p>
<pre class="prettyprint lang-js">
exports.answer = 42;
exports.start = function () {
console.log('Starting the universe....');
}
</pre>
<p>This module can be used in another script like the following:</p>
<pre class="prettyprint lang-js">
var universe = require('./universe');
universe.start();
console.log('The answer is', universe.answer);
</pre>
<p>With this module support, a long PhantomJS script can be broken down into smaller files and thus it becomes more maintainable.</p>
<p><strong>Cookies handling</strong></p>
<p>Support for cookies has been added in the previous version. In this release, the implementation is significantly improved in order to make it behave as similar as possible in a real web browser. The cookies are stored in a global container ("cookiejar") which can be serialized and modified easily.</p>
<p>The following simple example shows every single cookie set when accessing a web site:</p>
<pre class="prettyprint lang-js">
var page = require('webpage').create();
phantom.cookiesEnabled = true;
page.open('http://m.bing.com', function () {
console.log(JSON.stringify(phantom.cookies, null, 2));
phantom.exit();
});
</pre>
<p><strong>More input events</strong></p>
<p>PhantomJS can send input events to a web page. This not a DOM event, it is more like a real user input in a web browser.</p>
<p>In this version, a mouse event can now explicitly specify the button corresponding to the event: <code>middle</code> or <code>right</code> (otherwise it is left by default). In addition, <code>doubleclick</code> event type is also supported. The following code fragment demonstrates sending a right-click:</p>
<pre class="prettyprint lang-js">
page.open(url, function () {
page.sendEvent('mousepress', 50, 100, 'right');
});
</pre>
<p>Beside mouse events, finally you can also trigger keyboard-related events: <code>keyup</code>, <code>keydown</code>, and <code>keypress</code>. For any of these events, a character or a string needs to be passed as in the following code fragment:</p>
<pre class="prettyprint lang-js">
page.open(url, function () {
page.sendEvent('keypress', 'A'); // send one char
page.sendEvent('keypress', 'PhantomJS'); // send a sequence of characters
});
</pre>
<p><strong>New features</strong></p>
<ul>
<li>Added a module system modelled after CommonJS/Node.js (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=47">47</a>)
<li>Added support for window pop-up (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=151">151</a>)
<li>Static build on Linux (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=413">413</a>)
<li>Added run-time detection of SSL support (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=484">484</a>)
<li>Added more events support (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=492">492</a>, <a href="http://code.google.com/p/phantomjs/issues/detail?id=712">712</a>)
<li>Added support for disabling automatic proxy detection (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=580">580</a>)
<li>Provided page closing callback (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=678">678</a>)
<li>Added methods to access URL, frames URL, frame Content (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=758">758</a>)
<li>Added more cookies-related API (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=761">761</a>)
</ul>
<p><strong>Improvements</strong></p>
<ul>
<li>Refactored command-line options handling (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=55">55</a>)
<li>Improved the workflow for producing release builds (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=599">599</a>)
<li>Improved cookies API and implementation (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=603">603</a>, <a href="http://code.google.com/p/phantomjs/issues/detail?id=761">761</a>)
<li>Improved frame switching API (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=654">654</a>)
<li>Fixed iframe handling regression (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=683">683</a>)
<li>Fixed OS version number with Windows 8 and Mountain Lion (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=684">684</a>, <a href="http://code.google.com/p/phantomjs/issues/detail?id=688">688</a>)
<li>Fixed HAR navigation info in the netsniff example (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=733">733</a>)
<li>Fixed compile warnings with Visual Studio (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=744">744</a>)
<li>Removed hacks for static linking on Windows (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=753">753</a>)
<li>Added ICO image handling on Windows (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=799">779</a>)
<li>Fixed font antialiasing on Windows (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=785">785</a>)
<li>Improved Jasmine test runner for Jasmine 1.2 (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=792">792</a>)
</ul>
<p><strong>Known Issues on Microsoft Windows</strong></p>
<ul>
<li>Very slow network performance. The workaround is to set <a href="https://github.com/ariya/phantomjs/wiki/API-Reference#wiki-command-line-options">proxy type</a> to &quot;<tt>none</tt>&quot; (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=580">580</a>)
<li>Some graphics drivers may cause mysterious crash (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=845">845</a>)
</ul>
<p>Back to <a href="releases.html">all releases</a>.</p>
</div>
</div>
<div id="footer">
<div id="footer-content" class="container_12">
<p>
&copy; Copyright 2010-2013 <a href="http://twitter.com/AriyaHidayat">Ariya Hidayat</a> &mdash; Website design by <a href="http://svay.com/">Maurice Svay</a>
</p>
</div>
</div>
</body>
</html>

View File

@ -1,232 +0,0 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<title>PhantomJS 1.8 Release Notes</title>
<meta name="description" content="">
<meta name="author" content="">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="screen.min.css">
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-21665893-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<link rel="stylesheet" type="text/css" href="prettify.css"/>
<link rel="stylesheet" type="text/css" href="snippet.css"/>
<script type="text/javascript" src="js/prettify.js"></script>
<style>
#description p {
line-height: 125%;
text-align: left;
margin-bottom: 10px;
margin-top: 10px;
}
#description h2 {
text-align: left;
margin: 0.8em 0;
font-size: 150%;
}
#description ul {
line-height: 125%;
list-style-type: disc;
margin-left: 1em;
margin-bottom: 1em;
}
#description li {
margin-left: 1em;
}
table {
margin: 10px;
}
table th{
font-weight: bold;
background-color: #eee;
}
table td,table th {
padding: 10px;
}
</style>
</head>
<body onload="prettyPrint()">
<div id="intro">
<div id="header" class="container_12">
<a href="index.html" class="grid_4 alpha"><img src="images/phantomjs-logo.png" alt="PhantomJS" id="logo" width="240" height="80"></a>
<ul id="nav" class="grid_8 omega">
<li><a href="https://github.com/ariya/phantomjs">Source Code</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki">Documentation</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/API-Reference">API</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/Examples">Examples</a></li>
<li><a href="faq.html">FAQ</a></li>
</ul>
</div>
<div id="introduction" class="container_12">
<div class="grid_7 alpha">
<h1>PhantomJS 1.8 Release Notes</h1>
</div>
</div>
</div>
<div id="description" class="container_12">
<div class="grid_10">
<p>PhantomJS 1.8, <em><a href="release-names.html">Blue Winter Rose</a></em>, was released on December 21, 2012. It integrated Ghost Driver, an implementation of WebDriver Wire Protocol.</p>
<p><strong>WebDriver support via Ghost Driver integration</strong></p>
<p>
<a href="https://github.com/detro/ghostdriver">Ghost Driver</a>, a project by
<a href="http://blog.ivandemarino.me/2012/12/04/Finally-GhostDriver-1-0-0">Ivan De Marino</a>, is an implementation
of <a href="http://code.google.com/p/selenium/wiki/JsonWireProtocol">WebDriver Wire Protocol</a>.
In this PhantomJS release, Ghost Driver functionalities have been fully integrated.
</p>
<p>
To launch PhantomJS in <em>Remote WebDriver mode</em> at the intended <code>PORT</code> number:
<pre class="prettyprint lang-bash">phantomjs --webdriver=PORT</pre>
</p>
<p>
The following example, written in Ruby, assumes PhantomJS WebDriver is running on port <code>9134</code>.
The script will load Google, submit a search for the term <em>"PhantomJS"</em> and print the page title
of the search result page:
<pre class="prettyprint lang-ruby">
require "selenium-webdriver"
driver = Selenium::WebDriver.for(:remote, :url => "http://localhost:9134")
driver.navigate.to "http://google.com"
element = driver.find_element(:name, 'q')
element.send_keys "PhantomJS"
element.submit
puts driver.title
driver.quit</pre>
</p>
<p>
Bindings for your favourite programming language can be found in <a href="https://code.google.com/p/selenium/downloads/list">Selenium &gt;= 2.27</a>:
<table>
<thead>
<tr>
<th>Language Binding</th>
<th>Status</th>
</tr>
</thead>
<tbody>
<tr>
<td>Java</td>
<td>Available</td>
</tr>
<tr>
<td>C#/.Net</td>
<td>Available</td>
</tr>
<tr>
<td>Python</td>
<td>Available</td>
</tr>
<tr>
<td>Ruby</td>
<td>Available</td>
</tr>
<tr>
<td>PHP</td>
<td>Work in progress</td>
</tr>
</tbody>
</table>
<strong>NOTICE:</strong> Language bindings are provided by kind members of the Selenium community.
Issues related to those should be
<a href="https://code.google.com/p/selenium/issues/list">reported to Selenium project</a>.
PhantomJS <strong>solely</strong> implements the Wire Protocol and it is not responsible for any/possible
binding malfunctions.
</p>
<p>
More details can be found in
<a href="http://blog.ivandemarino.me/2012/12/04/Finally-GhostDriver-1-0-0">this blog post</a>.
Also, make sure you check the documentation of <a href="http://seleniumhq.org/docs/03_webdriver.jsp">Selenium WebDriver</a>.
</p>
<p><strong>New features</strong></p>
<ul>
<li>Integrated GhostDriver as the WebDriver implementation (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=49">49</a>)
<li>Added an option to specify the SSL protocol (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=174">174</a>)
<li>Added encoding support for WebServer's response (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=505">505</a>)
<li>Added process ID (PID) to the System module (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=769">769</a>)
<li>Added properties to obtain page and frame title (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=799">799</a>)
<li>Added page navigation methods (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=808">808</a>)
<li>Added a limit for authentication attempts (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=826">826</a>)
<li>Added support for modifier keys in keyboard events (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=835">835</a>)
<li>Added onFilePicker callback for more generic file upload API (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=843">843</a>)
<li>Added the ability to set the page content and location (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=909">909</a>)
</ul>
<p><strong>Improvements</strong></p>
<ul>
<li>Fixed date parsing in ISO8601 format (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=187">187</a>, <a href="http://code.google.com/p/phantomjs/issues/detail?id=267">267</a>)
<li>Fixed window.location (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=530">530</a>, <a href="http://code.google.com/p/phantomjs/issues/detail?id=632">632</a>)
<li>Deregistered multiple callback handler (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=807">807</a>)
<li>Fixed sending of double-click events (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=848">848</a>)
<li>Increases maximum number of redirects (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=849">849</a>)
<li>Fixed keycodes sent for lowercase characters (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=852">852</a>)
<li>Fixed a regression in table row page break (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=880">880</a>)
<li>Completed the CoffeeScript version of the examples (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=907">907</a>)
<li>Updated Qt to version 4.8.4 (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=918">918</a>)
<li>Fixed potential hang in some example scripts (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=922">922</a>)
</ul>
<p><strong>Fix in 1.8.1</strong></p>
<ul>
<li>Mac OS X: Fix possible crash when using some TrueType fonts (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=690">690</a>)
</ul>
<p><strong>Fixes in 1.8.2</strong></p>
<ul>
<li>Fixed possible PDF error due to invalid CreationDate field (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=663">663</a>)
<li>Fixed crash when uploading non existing files (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=941">941</a>)
<li>Fixed possible crash when accessing inline frames (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=947">947</a>)
<li>Extended SSL ignore setting to synchronous XHR (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=985">985</a>)
<li>Fixed incorrect date handling in the cookies (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=1068">1068</a>)
</ul>
<p><strong>Known Issues on Microsoft Windows</strong></p>
<ul>
<li>Very slow network performance. The workaround is to set <a href="https://github.com/ariya/phantomjs/wiki/API-Reference#wiki-command-line-options">proxy type</a> to &quot;<tt>none</tt>&quot; (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=580">580</a>)
<li>Some graphics drivers may cause mysterious crash (issue <a href="http://code.google.com/p/phantomjs/issues/detail?id=845">845</a>)
</ul>
<p>Back to <a href="releases.html">all releases</a>.</p>
</div>
</div>
<div id="footer">
<div id="footer-content" class="container_12">
<p>
&copy; Copyright 2010-2013 <a href="http://twitter.com/AriyaHidayat">Ariya Hidayat</a> &mdash; Website design by <a href="http://svay.com/">Maurice Svay</a>
</p>
</div>
</div>
</body>
</html>

View File

@ -1,199 +0,0 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<title>PhantomJS 1.9 Release Notes</title>
<meta name="description" content="">
<meta name="author" content="">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="screen.min.css">
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-21665893-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<link rel="stylesheet" type="text/css" href="prettify.css"/>
<link rel="stylesheet" type="text/css" href="snippet.css"/>
<script type="text/javascript" src="js/prettify.js"></script>
<style>
#description p {
line-height: 125%;
text-align: left;
margin-bottom: 10px;
margin-top: 10px;
}
#description h2 {
text-align: left;
margin: 0.8em 0;
font-size: 150%;
}
#description ul {
line-height: 125%;
list-style-type: disc;
margin-left: 1em;
margin-bottom: 1em;
}
#description li {
margin-left: 1em;
}
table {
margin: 10px;
}
table th{
font-weight: bold;
background-color: #eee;
}
table td,table th {
padding: 10px;
}
</style>
</head>
<body onload="prettyPrint()">
<div id="intro">
<div id="header" class="container_12">
<a href="index.html" class="grid_4 alpha"><img src="images/phantomjs-logo.png" alt="PhantomJS" id="logo" width="240" height="80"></a>
<ul id="nav" class="grid_8 omega">
<li><a href="https://github.com/ariya/phantomjs">Source Code</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki">Documentation</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/API-Reference">API</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/Examples">Examples</a></li>
<li><a href="faq.html">FAQ</a></li>
</ul>
</div>
<div id="introduction" class="container_12">
<div class="grid_7 alpha">
<h1>PhantomJS 1.9 Release Notes</h1>
</div>
</div>
</div>
<div id="description" class="container_12">
<div class="grid_10">
<p>PhantomJS 1.9, <em><a href="release-names.html">Sakura</a></em>, was released on March 20, 2013. It came with an updated GhostDriver,
an improved resource loading control, as well as other incremental improvements.</p>
<p><strong>Note:</strong> PhantomJS 1.9 is the last release in the 1.x series. For the next 2.x series, the core implementation will be
ported to <a href="http://qt-project.org/doc/qt-5.0/qtdoc/qt5-intro.html">Qt 5</a> to get a more modern base platform,
as well as to have an updated WebKit module.</p>
<p><strong>Network requests control</strong></p>
<p>A new functionality is provided so that every network request can be aborted. This is quite similar to the existing
support for intercepting those requests (for monitoring purposes), except now any unwanted requests could be blocked as well.
The following code fragment demonstrate the use:</p>
<pre class="prettyprint lang-js">
page.onResourceRequested = function(requestData, request) {
if ((/http:\/\/.+?\.css$/gi).test(requestData['url'])) {
request.abort();
}
};
</pre>
<p>If a request has an associated URL ending with <code>.css</code>, it will not be routed to the server. Effectively,
this means that the page is loaded <a href="http://ariya.ofilabs.com/2013/06/capturing-web-page-without-stylesheets.html">without any stylesheets</a>
(often useful to check for connection failures). Matching the URL with the main resource URL can also be used to
<a href="http://ariya.ofilabs.com/2013/06/web-page-without-external-resources.html">exclude third-party assets</a>.</p>
<p>Of course, the URL matching can be more complicated than these simple examples.</p>
<p><strong>New features</strong></p>
<ul>
<li>Added spawn and execFile to execute external programs (issue <a href="https://github.com/ariya/phantomjs/issues/10219">10219</a>)</li>
<li>Added the ability to abort network requests (issue <a href="https://github.com/ariya/phantomjs/issues/10230">10230</a>)</li>
<li>Added system access to stdin, stdout, and stderr (issue <a href="https://github.com/ariya/phantomjs/issues/10333">10333</a>)</li>
<li>Added support for custom CA certificates location (issue <a href="https://github.com/ariya/phantomjs/issues/10916">10916</a>)</li>
<li>Added seek function to the File stream (issue <a href="https://github.com/ariya/phantomjs/issues/10937">10937</a>)</li>
<li>Implemented file read for a specified number of bytes (issue <a href="https://github.com/ariya/phantomjs/issues/10938">10938</a>)</li>
<li>Added a callback to handle network error (issue <a href="https://github.com/ariya/phantomjs/issues/10954">10954</a>, <a href="https://github.com/ariya/phantomjs/issues/10997">issue 10997</a>)</li>
<li>Added custom encoding support when opening a page (issue <a href="https://github.com/ariya/phantomjs/issues/11043">11043</a>)</li>
<li>Implemented require.stub() support for a factory function (issue <a href="https://github.com/ariya/phantomjs/issues/11044">11044</a>)</li>
<li>Added page loading indicator and progress (issue <a href="https://github.com/ariya/phantomjs/issues/11091">11091</a>)</li>
<li>Added a timeout option for network requests (issue <a href="https://github.com/ariya/phantomjs/issues/11129">11129</a>)</li>
</ul>
<p><strong>Improvements</strong></p>
<ul>
<li>Fixed the build on FreeBSD (issue <a href="https://github.com/ariya/phantomjs/issues/10597">10597</a>)</li>
<li>Ensured a consistent 72 dpi for Linux headless rendering (issue <a href="https://github.com/ariya/phantomjs/issues/10659">10659</a>)</li>
<li>Fixed possible PDF error due to invalid CreationDate field (issue <a href="https://github.com/ariya/phantomjs/issues/10663">10663</a>)</li>
<li>Fixed crash when uploading non existing files (issue <a href="https://github.com/ariya/phantomjs/issues/10941">10941</a>)</li>
<li>Improved the autocomplete internal of the interactive/REPL mode (issue <a href="https://github.com/ariya/phantomjs/issues/10943">10943</a>)</li>
<li>Fixed possible crash when accessing inline frames (issue <a href="https://github.com/ariya/phantomjs/issues/10947">10947</a>)</li>
<li>Changed Linux binary package setup to be built on CentOS 5 (issue <a href="https://github.com/ariya/phantomjs/issues/10963">10963</a>)</li>
<li>Extended SSL ignore setting to synchronous XHR (issue <a href="https://github.com/ariya/phantomjs/issues/10985">10985</a>)</li>
<li>Added convenient constants for modifier keys (issue <a href="https://github.com/ariya/phantomjs/issues/11056">11056</a>)</li>
<li>Fixed incorrect date handling in the cookies (issue <a href="https://github.com/ariya/phantomjs/issues/11068">11068</a>)</li>
<li>Updated GhostDriver to version 1.0.3 (issue <a href="https://github.com/ariya/phantomjs/issues/11146">11146</a>)</li>
</ul>
<p><strong>Examples</strong></p>
<ul>
<li>Fixed invalid data URI in the netsniff example (issue <a href="https://github.com/ariya/phantomjs/issues/10740">10740</a>)</li>
<li>Implemented a new weather example (issue <a href="https://github.com/ariya/phantomjs/issues/10794">10794</a>)</li>
<li>Fixed rendering issues in render_multi_url (issue <a href="https://github.com/ariya/phantomjs/issues/11021">11021</a>)</li>
<li>Fixed proper event sequence in page_events example (issue <a href="https://github.com/ariya/phantomjs/issues/11028">11028</a>)</li>
<li>Miscellanous tweaks (issue <a href="https://github.com/ariya/phantomjs/issues/11082">11082</a>)</li>
</ul>
<p><strong>Fixes in 1.9.1</strong></p>
<ul>
<li>Fixed problems with specifying proxy server (issue <a href="https://github.com/ariya/phantomjs/issues/10811">10811</a>, <a href="https://github.com/ariya/phantomjs/issues/11117">11117</a>)</li>
<li>Fixed UTF-8 encoding with system.stdout and system.stderr (issue <a href="https://github.com/ariya/phantomjs/issues/11162">11162</a>)</li>
<li>Ensured that onResourceReceived will be always invoked (issue <a href="https://github.com/ariya/phantomjs/issues/11163">11163</a>)</li>
<li>Fixed module loading from an absolute path on Windows (issue <a href="https://github.com/ariya/phantomjs/issues/11165">11165</a>)</li>
<li>Fixed typo in the command-line option for setting the cache size (issue <a href="https://github.com/ariya/phantomjs/issues/11219">11219</a>)</li>
<li>Fixed possible crash when handling network requests (issue <a href="https://github.com/ariya/phantomjs/issues/11252">11252</a>, <a href="https://github.com/ariya/phantomjs/issues/11338">11338</a>)</li>
</ul>
<p><strong>Fixes in 1.9.2</strong></p>
<ul>
<li>Fixed graphical artifacts with transparent background on Windows (issue <a href="https://github.com/ariya/phantomjs/issues/11276">11276</a>, <a href="https://github.com/ariya/phantomjs/issues/11007">11007</a>, <a href="https://github.com/ariya/phantomjs/issues/11366">11366</a>)</li>
<li>Updated GhostDriver to version 1.0.4 (issue <a href="https://github.com/ariya/phantomjs/issues/11452">11452</a>)</li>
</ul>
<p><strong>Known Issues on Microsoft Windows</strong></p>
<ul>
<li>Very slow network performance. The workaround is to set <a href="https://github.com/ariya/phantomjs/wiki/API-Reference#wiki-command-line-options">proxy type</a> to &quot;<tt>none</tt>&quot; (issue <a href="https://github.com/ariya/phantomjs/issues/10580">10580</a>)</li>
<li>Some graphics drivers may cause mysterious crash (issue <a href="https://github.com/ariya/phantomjs/issues/10845">10845</a>)</li>
</ul>
<p>Back to <a href="releases.html">all releases</a>.</p>
</div>
</div>
<div id="footer">
<div id="footer-content" class="container_12">
<p>
&copy; Copyright 2010-2013 <a href="http://twitter.com/AriyaHidayat">Ariya Hidayat</a> &mdash; Website design by <a href="http://svay.com/">Maurice Svay</a>
</p>
</div>
</div>
</body>
</html>

View File

@ -1,269 +0,0 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<title>PhantomJS: Names of Releases</title>
<meta name="description" content="">
<meta name="author" content="">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="screen.min.css">
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-21665893-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<style>
#description p {
line-height: 125%;
text-align: left;
margin-bottom: 10px;
margin-top: 10px;
}
#description h2 {
text-align: left;
margin: 0.8em 0;
font-size: 150%;
}
#description img {
margin: 20px;
border: 1px solid #888;
}
#description p.credit {
text-align: right;
font-size: 80%;
font-style: italic;
margin-bottom: 30px;
}
#description blockquote {
margin-left: 2em;
line-height: 125%;
}
</style>
</head>
<body>
<div id="intro">
<div id="header" class="container_12">
<a href="index.html" class="grid_4 alpha"><img src="images/phantomjs-logo.png" alt="PhantomJS" id="logo" width="240" height="80"></a>
<ul id="nav" class="grid_8 omega">
<li><a href="https://github.com/ariya/phantomjs">Source Code</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki">Documentation</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/API-Reference">API</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/Examples">Examples</a></li>
<li><a href="faq.html">FAQ</a></li>
</ul>
</div>
<div id="introduction" class="container_12">
<div class="grid_7 alpha">
<h1>Story Behind the Names</h1>
</div>
</div>
</div>
<div id="description" class="container_12">
<div class="grid_10">
<h2>PhantomJS 1.9 "Sakura"</h2>
<p><img src="http://farm6.static.flickr.com/5030/5607810834_3220056f56_m.jpg" align="right"></p>
<p>Sakura is a spring flower, see Ariya's <a href="https://groups.google.com/d/msg/phantomjs/yM25jtdispo/dXbenqn-mvYJ">email on Mar 23, 2013</a>:</p>
<blockquote>
We do agree that this release should mark the end of the 1.x series.
Going forward, we'll switch to Qt 5 and use the chance to boot the
all-new 2.0. For such a closing release, it just makes sense to pick
something related to the first code name ever given (exercise for the
reader), hence why 1.9 is called "Sakura".
</blockquote>
<br clear="all"/>
<h2>PhantomJS 1.8 "Blue Winter Rose"</h2>
<p><a href="http://awoiaf.westeros.org/index.php/File:Blue_Roses1.jpg"><img src="http://awoiaf.westeros.org/images/8/83/Blue_Roses1.jpg" width="225" align="right"></a></p>
<p>The <b>Blue Winter Rose</b> is a flower that grows in the glass gardens of Winterfell.
It's pale blue the color of frost. Also, it's connected to the legend of <b>Bael the Bard</b>.</p>
<blockquote>
Bael the Bard climbed the Wall.<br/>
Took the Kingsroad and entered Winterfell.<br/>
He made himself known as Sygerrik of Skagos, a singer.<br/>
He sang until midnight for the Lord's pleasure.<br/>
Impressed by his skills, Lord Brandon Stark asked him what rewarded he wanted.<br/>
Bael asked for the most beautiful flower in Winterfell's gardens.<br/>
Blue winter roses were just blooming.<br/>
Brandon Stark agreed to offer him one.<br/>
</blockquote>
<p>The following morning, the virgin daughter of the lord had disappeared. In her bed was a Blue Winter Rose.</p>
<p>Source: <a href="http://awoiaf.westeros.org/index.php/Blue_winter_rose">A wiki of Ice and Fire</a>.</p>
<br clear="all"/>
<p class ="credit">Photo by christopher goodband <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC BY-SA 2.0</a>.</p>
<h2>PhantomJS 1.7 "Blazing Star"</h2>
<p><a href="http://commons.wikimedia.org/wiki/File:Liatris_spicata_close-up.jpg"><img src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/63/Liatris_spicata_close-up.jpg/220px-Liatris_spicata_close-up.jpg" align="right"></a></p>
<p>Blazing Star is an autumn flower. See Ariya's
<a href="http://groups.google.com/d/topic/phantomjs/7jiydz_52cg">email</a> on Sep 22, 2102:</p>
<blockquote>
"Blazing Star" is a mesmerizing and beautiful flower, it is often used
as a symbol representing happiness and satisfaction. Tending these
flowers requires some patience, the reward is however worth all the hassle.
Its beautiful appearance makes it popular among gardeners, don't be
surprised if you are stunned by the florets for hours and hours.
Blazing star is also known to have mild medicinal characteristics.
A fabulous combination of outer beauty and inner beauty I would say.
These days, with almost every web-related test framework gets
connected to PhantomJS in one way or another, presenting these
attractive yet romantic blossoms marking a joyful relationship could
not be a better honor for us.
</blockquote>
<p class ="credit">Photo by Frank Wouters <a href="http://creativecommons.org/licenses/by/2.0/deed.en">CC-BY</a><br/>via Wikimedia Commons.</p>
<h2>PhantomJS 1.6 "Lavender"</h2>
<p><a href="http://commons.wikimedia.org/wiki/File:Single_lavendar_flower02.jpg"><img src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/60/Single_lavendar_flower02.jpg/220px-Single_lavendar_flower02.jpg" align="right"></a> </p>
<p>Lavender is a summer flower. See Ariya's <a href="http://groups.google.com/d/topic/phantomjs/EOKOqdmXcjU">email on June 18, 2012</a>:</p>
<blockquote>
...for this summer release, I pick the code name "Lavender". This summer flower is not
only beautiful, it is also known for its wonderful scent and soothing
quality, often served as a remedy for anything from sore joints to
insomnia. Well, with the widespread use of PhantomJS in various
testing frameworks since some releases ago, isn't that exactly what
this headless WebKit also brings to many web developers? Helping
people to stay calm, avoid anxiety, and increase their productivity is
surely a decent goal to have!
</blockquote>
<br clear="all"/>
<p class="credit">Photo by Fir0002/Flagstaffotos (Own work) <a href="http://creativecommons.org/licenses/by-nc/3.0/">CC-BY-NC</a><br/>via Wikimedia Commons.</p>
<h2>PhantomJS 1.5 "Ghost Flower"</h2>
<p><a href="http://commons.wikimedia.org/wiki/File:Mohavea_confertiflora_1.jpg"><img src="http://upload.wikimedia.org/wikipedia/commons/thumb/8/8f/Mohavea_confertiflora_1.jpg/218px-Mohavea_confertiflora_1.jpg" align="right"></a></p>
<p>Ghost Flower is a spring flower. See Ariya's <a href="https://groups.google.com/d/topic/phantomjs/6pDNT-Epk7E/discussion">email on March 15, 2012</a>:</p>
<blockquote>
...for this spring release, I cast the code name "Ghost Flower". This spring flower is
rather beautiful actually. California, where I now reside, is one of
its native home. In addition, I'm sure you'll notice the significance
of the first word in the name :)
</blockquote>
<br clear="all"/>
<p class="credit">Photo by Stan Shebs (Own work) <a href="http://creativecommons.org/licenses/by-sa/3.0/deed.en">CC-BY-SA-3.0</a><br/>via Wikimedia Commons.</p>
<h2>PhantomJS 1.4 "Glory of the Snow"</h2>
<p><a title="By Hedwig Storch (Own work) [CC-BY-SA-3.0 (www.creativecommons.org/licenses/by-sa/3.0)], via Wikimedia Commons" href="http://commons.wikimedia.org/wiki/File%3ADunkle_Sternhyazinthe_2008-3-7a.JPG"><img width="240" alt="Dunkle Sternhyazinthe 2008-3-7a" src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/07/Dunkle_Sternhyazinthe_2008-3-7a.JPG/240px-Dunkle_Sternhyazinthe_2008-3-7a.JPG" align="right"></a> </p>
<p>Glory of the Snow is a winter flower. See Ariya's <a href="https://groups.google.com/d/topic/phantomjs/5VA1kQH_864/discussion">email on Nov 29, 2011</a>:</p>
<blockquote>
Approaching the final month before its very first birthday, I'm sure
we're all very happy to see that PhantomJS gains a lot of tractions
these days. There are reports of people using it with various
JavaScript test frameworks, along with assorted types of continuous
integration systems. The ecosystem grows and lately there seems to be
an increasing amount of projects using PhantomJS as a basis to do
something which was not possible before. In short, it spreads like
wild fire. Thus, it just makes sense for me to cast the winter release
of PhantomJS, i.e. version 1.4, as "Glory of the Snow". It's a winter
flower with beautiful colorful star petals which easily grows and
spreads to almost everywhere.
</blockquote>
<br clear="all"/>
<p class="credit">Photo by Hedwig Storch (Own work) <a href="http://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA-3.0</a><br/>via Wikimedia Commons.</p>
<h2>PhantomJS 1.3 "Water Lily"</h2>
<p><a title="By Kazuyanagae (Own work) [CC-BY-SA-3.0 (www.creativecommons.org/licenses/by-sa/3.0)], via Wikimedia Commons" href="http://commons.wikimedia.org/wiki/File:Nymphaea_japan.jpg"><img width="240" alt="Nymphaea japan" src="http://upload.wikimedia.org/wikipedia/commons/thumb/f/fa/Nymphaea_japan.jpg/240px-Nymphaea_japan.jpg" align="right"></a></p>
<p>Water Lily is an autumn flower. See Ariya's <a href="https://groups.google.com/d/topic/phantomjs/kRz9atKlyWE/discussion">email on June 24, 2011</a>:</p>
<blockquote>
When I started PhantomJS, I never thought it would be this
fascinating. Getting some interests from the integration testing folks
is awesome. In particular, I hope (we're getting there) PhantomJS can
be a nice solution for, among others, Ruby developers. Related to
this, hereby I designate the autumn release of PhantomJS, i.e. version 1.3,
as "Water Lily", an autumn flower considered by many to be the "jewels of the pond".
</blockquote>
<br clear="all"/>
<p class="credit">Photo by Kazuyanagae (Own work), <a href="http://creativecommons.org/licenses/by-sa/3.0/">CC-BY-SA-3.0</a><br/>via Wikimedia Commons.</p>
<h2>PhantomJS 1.2 "Birds of Paradise"</h2>
<p><img src="http://farm6.static.flickr.com/5277/5896075342_9a3118666f_m.jpg" width="240" height="160" alt="bird of paradise" align="right"></p>
<p>Birds of Paradise is a summer flower. See Ariya's <a href="https://groups.google.com/forum/#!topic/phantomjs/5MHRKM8IOyU/discussion">email on May 31, 2011</a>:</p>
<blockquote>
I feel honored that PhantomJS gains a lot of tractions and used by
many front-end developers. One particular striking example is Twitter.
Now, if I allow to pick a random bird (remember the tweet connection),
that'll be sunbird. In particular because Strelitzia nicolai is
pollinated by the sunbirds.
Strelitzia nicolai is just one species under the genus Strelitzia,
commonly known as the beautiful Birds of Paradise flowers.
</blockquote>
<br clear="all"/>
<h2>PhantomJS 1.1 "Cherry Blossom"</h2>
<p><img src="http://farm6.static.flickr.com/5030/5607810834_3220056f56_m.jpg" align="right"></p>
<p>Cherry Blossom is a spring flower. See Ariya's <a href="https://groups.google.com/forum/#!topic/phantomjs/0LINaH93DpI/discussion">email on Apr 9, 2011</a>:</p>
<blockquote>
I would like to have "seasonal" PhantomJS release schedules. Thus,
this month seems to qualify very well for a Spring release of
PhantomJS 1.1. Most likely code name for this release is "Cherry
Blossom" since there are apparently lots of PhantomJS fans in Japan
(search for PhantomJS in Twitter) and with the recent difficult time
they have, paying homage to them is the least we can do."
</blockquote>
</div>
</div>
<div id="footer">
<div id="footer-content" class="container_12">
<p>
&copy; Copyright 2010-2013 <a href="http://twitter.com/AriyaHidayat">Ariya Hidayat</a> &mdash; Website design by <a href="http://svay.com/">Maurice Svay</a>
</p>
</div>
</div>
</body>
</html>

View File

@ -1,108 +0,0 @@
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<title>PhantomJS: Releases</title>
<meta name="description" content="">
<meta name="author" content="">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href='http://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="screen.min.css">
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-21665893-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<style>
#description p {
line-height: 125%;
text-align: left;
margin-bottom: 10px;
margin-top: 10px;
}
#description h2 {
text-align: left;
margin: 0.8em 0;
font-size: 150%;
}
#description pre {
margin-left: 2em;
}
#description ul {
line-height: 125%;
list-style-type: disc;
margin-left: 1em;
margin-bottom: 1em;
}
#description li {
margin-left: 1em;
}
</style>
</head>
<body>
<div id="intro">
<div id="header" class="container_12">
<a href="index.html" class="grid_4 alpha"><img src="images/phantomjs-logo.png" alt="PhantomJS" id="logo" width="240" height="80"></a>
<ul id="nav" class="grid_8 omega">
<li><a href="https://github.com/ariya/phantomjs">Source Code</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki">Documentation</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/API-Reference">API</a></li>
<li><a href="https://github.com/ariya/phantomjs/wiki/Examples">Examples</a></li>
<li><a href="faq.html">FAQ</a></li>
</ul>
</div>
<div id="introduction" class="container_12">
<div class="grid_7 alpha">
<h1>PhantomJS Releases</h1>
</div>
</div>
</div>
<div id="description" class="container_12">
<div class="grid_10">
<p><a href="release-1.9.html">PhantomJS 1.9</a> "Sakura", was released on March 20, 2013. It came with an updated GhostDriver, an improved resource loading control, as well as other incremental improvements.</p>
<p><a href="release-1.8.html">PhantomJS 1.8</a> "Blue Winter Rose", was released on December 21, 2012. It integrated GhostDriver, a remote WebDriver (Wire Protocol) implementation, and many related API addition.</p>
<p><a href="release-1.7.html">PhantomJS 1.7</a> "Blazing Star", was released on September 22, 2012. It added module system support (modelled after CommonJS), better cookies handling, and other small improvements.</p>
<p><a href="release-1.6.html">PhantomJS 1.6</a> "Lavender" was released on June 20, 2012. It is a minor update with some improvements on the rendering and script evaluation, as well as various bug fixes.</p>
<p><a href="release-1.5.html">PhantomJS 1.5</a> "Ghost Flower" was released on March 20, 2012. It added pure headless (no X11) for the Linux version, improved troubleshooting with interactive mode and remote debugger, and a new system module.</p>
<p><a href="release-1.4.html">PhantomJS 1.4</a> "Glory of the Snow" was released on December 22, 2011. It is a minor update, mostly bug fixes and one new major feature: WebServer module.</p>
<p><a href="release-1.3.html">PhantomJS 1.3</a> "Water Lily" was released on September 23, 2011. It added preliminary module syntax, file system support, mouse events, and other page-related improvements.</p>
<p><a href="release-1.2.html">PhantomJS 1.2</a> "Birds of Paradise" was released on June 21, 2011. It implemented an abstraction for web page object, added support for rasterization and network traffic monitoring.</p>
<p><a href="release-1.1.html">PhantomJS 1.1</a> "Cherry Blossom" was released on April 27, 2011. It added supports for file upload, network proxy, disk cache, GIF output. In addition, scripts can now be written in CoffeeScript.</p>
</div>
</div>
<div id="footer">
<div id="footer-content" class="container_12">
<p>
&copy; Copyright 2010-2013 <a href="http://twitter.com/AriyaHidayat">Ariya Hidayat</a> &mdash; Website design by <a href="http://svay.com/">Maurice Svay</a>
</p>
</div>
</div>
</body>
</html>

211
reset.css
View File

@ -1,211 +0,0 @@
/* `XHTML, HTML4, HTML5 Reset
----------------------------------------------------------------------------------------------------*/
a,
abbr,
acronym,
address,
applet,
article,
aside,
audio,
b,
big,
blockquote,
body,
canvas,
caption,
center,
cite,
code,
dd,
del,
details,
dfn,
dialog,
div,
dl,
dt,
em,
embed,
fieldset,
figcaption,
figure,
font,
footer,
form,
h1,
h2,
h3,
h4,
h5,
h6,
header,
hgroup,
hr,
html,
i,
iframe,
img,
ins,
kbd,
label,
legend,
li,
mark,
menu,
meter,
nav,
object,
ol,
output,
p,
pre,
progress,
q,
rp,
rt,
ruby,
s,
samp,
section,
small,
span,
strike,
strong,
sub,
summary,
sup,
table,
tbody,
td,
tfoot,
th,
thead,
time,
tr,
tt,
u,
ul,
var,
video,
xmp {
border: 0;
margin: 0;
padding: 0;
font-size: 100%;
}
html,
body {
height: 100%;
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section {
/*
Override the default (display: inline) for
browsers that do not recognize HTML5 tags.
IE8 (and lower) requires a shiv:
http://ejohn.org/blog/html5-shiv
*/
display: block;
}
b,
strong {
/*
Makes browsers agree.
IE + Opera = font-weight: bold.
Gecko + WebKit = font-weight: bolder.
*/
font-weight: bold;
}
img {
color: transparent;
font-size: 0;
vertical-align: middle;
/*
For IE.
http://css-tricks.com/ie-fix-bicubic-scaling-for-images
*/
-ms-interpolation-mode: bicubic;
}
ol,
ul {
list-style: none;
}
li {
/*
For IE6 + IE7:
"display: list-item" keeps bullets from
disappearing if hasLayout is triggered.
*/
display: list-item;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
th,
td,
caption {
font-weight: normal;
vertical-align: top;
text-align: left;
}
q {
quotes: none;
}
q:before,
q:after {
content: '';
content: none;
}
sub,
sup,
small {
font-size: 75%;
}
sub,
sup {
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
svg {
/*
For IE9. Without, occasionally draws shapes
outside the boundaries of <svg> rectangle.
*/
overflow: hidden;
}

View File

@ -1,215 +0,0 @@
/*
Credits
Icons from: http://www.smashingmagazine.com/2011/12/29/freebie-free-vector-web-icons-91-icons/
*/
@import "reset.css";
@import "960_12_col.css";
body {
font-family: 'Droid Sans', 'Lucida Grande', sans-serif;
line-height: 1.125em;
}
#intro {
background: #43413e;
color: #FFF;
}
#header {
height: 90px;
}
#logo {
}
#nav {
text-align: right;
padding-top: 36px;
}
#nav li {
display: inline;
}
#nav a {
color: #e1e0dc;
text-decoration: none;
font-weight: bold;
text-transform: uppercase;
margin: 0 1em;
}
#nav a:hover {
color: #FFF;
}
#introduction {
padding: 36px 0;
}
#introduction a {
color: #FFF;
}
#introduction h1 {
color: #FFF;
font-weight: bold;
font-size: 2.25em;
line-height: 1em;
text-shadow: 0 -1px 0 #000;
margin: 0 0 1em 0;
}
#introduction .explanation {
margin: 1em 0 2em 0;
font-size: 0.875em;
color: #e1e0dc;
}
#introduction .action a {
display: inline-block;
line-height: 54px;
color: #FFF;
font-size: 1.5em;
margin-right: 1em;
}
#download {
text-decoration: none;
height: 54px;
padding: 0 1em;
border: 1px solid #004513;
border-radius: 4px;
background: #7da21a;
background: -moz-linear-gradient(top, #afe225 0%, #7da21a 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#afe225), color-stop(100%,#7da21a));
background: -webkit-linear-gradient(top, #afe225 0%,#7da21a 100%);
background: -o-linear-gradient(top, #afe225 0%,#7da21a 100%);
background: -ms-linear-gradient(top, #afe225 0%,#7da21a 100%);
background: linear-gradient(top, #afe225 0%,#7da21a 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#afe225', endColorstr='#7da21a',GradientType=0 );
font-weight: bold;
text-shadow: 0 -1px 0 #3d9700;
box-shadow: ;
-webkit-box-shadow:
inset 0px 2px 0px 0px #def67e,
0px 2px 5px rgba(0,0,0,.2);
-moz-box-shadow:
inset 0px 2px 0px 0px #def67e,
0px 2px 5px rgba(0,0,0,.2);
box-shadow:
inset 0px 2px 0px 0px #def67e,
0px 2px 5px rgba(0,0,0,.2);
}
#download:hover {
background: #97bd38;
background: -moz-linear-gradient(top, #bef038 0%, #97bd38 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#bef038), color-stop(100%,#97bd38));
background: -webkit-linear-gradient(top, #bef038 0%,#97bd38 100%);
background: -o-linear-gradient(top, #bef038 0%,#97bd38 100%);
background: -ms-linear-gradient(top, #bef038 0%,#97bd38 100%);
background: linear-gradient(top, #bef038 0%,#97bd38 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#bef038', endColorstr='#97bd38',GradientType=0 );
}
#download span {
font-weight: normal;
}
#intro-example {
border-radius: 9px;
background: #373633;
}
#intro-example pre {
margin: 18px;
}
#community {
background: #e1e0dc;
color: #43413e;
text-align: center;
font-size: 1.125em;
padding: 1.5em 0;
}
#community h2 {
font-weight: bold;
display: inline-block;
}
#community ul {
display: inline;
}
#community li {
list-style: none;
display: inline-block;
}
#community a {
margin: 0 1.5em;
color: #43413e;
text-decoration: none;
}
#community a:hover {
color: #000;
text-decoration: underline;
}
#link-release,
#link-ml,
#link-bugs {
display: inline-block;
padding-left: 44px;
height: 36px;
line-height: 36px;
background: url(images/icon-release.png) no-repeat 0 50%;
}
#link-ml {
background: url(images/icon-ml.png) no-repeat 0 50%;
}
#link-bugs {
background: url(images/icon-bugs.png) no-repeat 0 50%;
}
#description {
color: #43413e;
padding-bottom: 2em;
}
#description h2 {
color: #2ecbd6;
font-size: 2.25em;
font-weight: bold;
margin: 1.5em 0;
text-align: center;
}
#description h3 {
font-weight: bold;
text-transform: uppercase;
}
#description .feature {
font-size: 0.875em;
}
#feature-end {
text-align: center;
margin: 1.5em 0 0 0;
}
#footer {
background: #2ecbd6;
color: #FFF;
padding: 18px 0;
font-size: .875em;
}
#footer a {
color: #FFF;
}
/* Simplified solarized */
.solarized {
color: #839496;
}
.solarized .object {
color: #b58900;
}
.solarized .function {
color: #268bd2;
}
.solarized .literal {
color: #29a197;
}
.solarized .comment {
color: #586e75;
}

3
screen.min.css vendored
View File

@ -1,3 +0,0 @@
a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,dialog,div,dl,dt,em,embed,fieldset,figcaption,figure,font,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,meter,nav,object,ol,output,p,pre,progress,q,rp,rt,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video,xmp{border:0;margin:0;padding:0;font-size:100%}html,body{height:100%}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}b,strong{font-weight:bold}img{color:transparent;font-size:0;vertical-align:middle;-ms-interpolation-mode:bicubic}ol,ul{list-style:none}li{display:list-item}table{border-collapse:collapse;border-spacing:0}th,td,caption{font-weight:normal;vertical-align:top;text-align:left}q{quotes:none}q:before,q:after{content:'';content:none}sub,sup,small{font-size:75%}sub,sup{line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}svg{overflow:hidden}
body{min-width:960px}.container_12{margin-left:auto;margin-right:auto;width:960px}.grid_1,.grid_2,.grid_3,.grid_4,.grid_5,.grid_6,.grid_7,.grid_8,.grid_9,.grid_10,.grid_11,.grid_12{display:inline;float:left;margin-left:10px;margin-right:10px}.push_1,.pull_1,.push_2,.pull_2,.push_3,.pull_3,.push_4,.pull_4,.push_5,.pull_5,.push_6,.pull_6,.push_7,.pull_7,.push_8,.pull_8,.push_9,.pull_9,.push_10,.pull_10,.push_11,.pull_11{position:relative}.alpha{margin-left:0}.omega{margin-right:0}.container_12 .grid_1{width:60px}.container_12 .grid_2{width:140px}.container_12 .grid_3{width:220px}.container_12 .grid_4{width:300px}.container_12 .grid_5{width:380px}.container_12 .grid_6{width:460px}.container_12 .grid_7{width:540px}.container_12 .grid_8{width:620px}.container_12 .grid_9{width:700px}.container_12 .grid_10{width:780px}.container_12 .grid_11{width:860px}.container_12 .grid_12{width:940px}.container_12 .prefix_1{padding-left:80px}.container_12 .prefix_2{padding-left:160px}.container_12 .prefix_3{padding-left:240px}.container_12 .prefix_4{padding-left:320px}.container_12 .prefix_5{padding-left:400px}.container_12 .prefix_6{padding-left:480px}.container_12 .prefix_7{padding-left:560px}.container_12 .prefix_8{padding-left:640px}.container_12 .prefix_9{padding-left:720px}.container_12 .prefix_10{padding-left:800px}.container_12 .prefix_11{padding-left:880px}.container_12 .suffix_1{padding-right:80px}.container_12 .suffix_2{padding-right:160px}.container_12 .suffix_3{padding-right:240px}.container_12 .suffix_4{padding-right:320px}.container_12 .suffix_5{padding-right:400px}.container_12 .suffix_6{padding-right:480px}.container_12 .suffix_7{padding-right:560px}.container_12 .suffix_8{padding-right:640px}.container_12 .suffix_9{padding-right:720px}.container_12 .suffix_10{padding-right:800px}.container_12 .suffix_11{padding-right:880px}.container_12 .push_1{left:80px}.container_12 .push_2{left:160px}.container_12 .push_3{left:240px}.container_12 .push_4{left:320px}.container_12 .push_5{left:400px}.container_12 .push_6{left:480px}.container_12 .push_7{left:560px}.container_12 .push_8{left:640px}.container_12 .push_9{left:720px}.container_12 .push_10{left:800px}.container_12 .push_11{left:880px}.container_12 .pull_1{left:-80px}.container_12 .pull_2{left:-160px}.container_12 .pull_3{left:-240px}.container_12 .pull_4{left:-320px}.container_12 .pull_5{left:-400px}.container_12 .pull_6{left:-480px}.container_12 .pull_7{left:-560px}.container_12 .pull_8{left:-640px}.container_12 .pull_9{left:-720px}.container_12 .pull_10{left:-800px}.container_12 .pull_11{left:-880px}.clear{clear:both;display:block;overflow:hidden;visibility:hidden;width:0;height:0}.clearfix:before,.clearfix:after,.container_12:before,.container_12:after{content:'.';display:block;overflow:hidden;visibility:hidden;font-size:0;line-height:0;width:0;height:0}.clearfix:after,.container_12:after{clear:both}.clearfix,.container_12{zoom:1}
body{font-family:'Droid Sans','Lucida Grande',sans-serif;line-height:1.125em}#intro{background:#43413e;color:#FFF}#header{height:90px}#nav{text-align:right;padding-top:36px}#nav li{display:inline}#nav a{color:#e1e0dc;text-decoration:none;font-weight:bold;text-transform:uppercase;margin:0 1em}#nav a:hover{color:#FFF}#introduction{padding:36px 0}#introduction a{color:#FFF}#introduction h1{color:#FFF;font-weight:bold;font-size:2.25em;line-height:1em;text-shadow:0 -1px 0 #000;margin:0 0 1em 0}#introduction .explanation{margin:1em 0 2em 0;font-size:.875em;color:#e1e0dc}#introduction .action a{display:inline-block;line-height:54px;color:#FFF;font-size:1.5em;margin-right:1em}#download{text-decoration:none;height:54px;padding:0 1em;border:1px solid #004513;border-radius:4px;background:#7da21a;background:-moz-linear-gradient(top,#afe225 0,#7da21a 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#afe225),color-stop(100%,#7da21a));background:-webkit-linear-gradient(top,#afe225 0,#7da21a 100%);background:-o-linear-gradient(top,#afe225 0,#7da21a 100%);background:-ms-linear-gradient(top,#afe225 0,#7da21a 100%);background:linear-gradient(top,#afe225 0,#7da21a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#afe225',endColorstr='#7da21a',GradientType=0);font-weight:bold;text-shadow:0 -1px 0 #3d9700;box-shadow:;-webkit-box-shadow:inset 0 2px 0 0 #def67e,0px 2px 5px rgba(0,0,0,.2);-moz-box-shadow:inset 0 2px 0 0 #def67e,0px 2px 5px rgba(0,0,0,.2);box-shadow:inset 0 2px 0 0 #def67e,0px 2px 5px rgba(0,0,0,.2)}#download:hover{background:#97bd38;background:-moz-linear-gradient(top,#bef038 0,#97bd38 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#bef038),color-stop(100%,#97bd38));background:-webkit-linear-gradient(top,#bef038 0,#97bd38 100%);background:-o-linear-gradient(top,#bef038 0,#97bd38 100%);background:-ms-linear-gradient(top,#bef038 0,#97bd38 100%);background:linear-gradient(top,#bef038 0,#97bd38 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#bef038',endColorstr='#97bd38',GradientType=0)}#download span{font-weight:normal}#intro-example{border-radius:9px;background:#373633}#intro-example pre{margin:18px}#community{background:#e1e0dc;color:#43413e;text-align:center;font-size:1.125em;padding:1.5em 0}#community h2{font-weight:bold;display:inline-block}#community ul{display:inline}#community li{list-style:none;display:inline-block}#community a{margin:0 1.5em;color:#43413e;text-decoration:none}#community a:hover{color:#000;text-decoration:underline}#link-release,#link-ml,#link-bugs{display:inline-block;padding-left:44px;height:36px;line-height:36px;background:url(images/icon-release.png) no-repeat 0 50%}#link-ml{background:url(images/icon-ml.png) no-repeat 0 50%}#link-bugs{background:url(images/icon-bugs.png) no-repeat 0 50%}#description{color:#43413e;padding-bottom:2em}#description h2{color:#2ecbd6;font-size:2.25em;font-weight:bold;margin:1.5em 0;text-align:center}#description h3{font-weight:bold;text-transform:uppercase}#description .feature{font-size:.875em}#feature-end{text-align:center;margin:1.5em 0 0 0}#footer{background:#2ecbd6;color:#FFF;padding:18px 0;font-size:.875em}#footer a{color:#FFF}.solarized{color:#839496}.solarized .object{color:#b58900}.solarized .function{color:#268bd2}.solarized .literal{color:#29a197}.solarized .comment{color:#586e75}

View File

@ -1,10 +0,0 @@
pre.prettyprint {
border: 1px solid #ccc;
background-color: #f8f8f8;
border-radius: 3px;
padding: 6px 10px;
font-size: 13px;
line-height: 19px;
margin-right: 80px;
margin-left: 40px;
}

View File

@ -1 +0,0 @@
*{padding:0;margin:0}a img{border:0}body{background:url('images/bg.jpg') repeat-x #fff;color:#000;font-family:Arial,Helvetica,sans-serif}#wrapper{width:966px;margin:0 auto}#header{height:89px}#logo{float:left;margin-top:23px}#nav{float:right;margin-top:30px;font-size:11px;font-weight:bold;text-transform:uppercase;text-shadow:#ebebeb 1px 1px 0}#nav li{float:left;display:inline}#nav a{display:inline-block;padding:9px 13px;border:1px solid transparent;color:#383838;text-decoration:none}#nav li.active a{background:#d2d2d2;border:1px solid #e4e3e4;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}#nav a:hover{color:#000}#masthead{position:relative;background:url('images/masthead-bg.gif') #fff repeat-x;border:1px solid #8d8d8d;height:429px;padding-left:28px;margin:0 9px -2px;background-position:1px;-webkit-box-shadow:0 4px 2px 2px #b0b2b4}#masthead h2{width:370px;padding-top:50px;font-size:40px;line-height:36px;letter-spacing:-2px;font-weight:bold;color:#383838;text-shadow:1px 1px 0 #fff}#masthead p{width:445px;padding:21px 0 30px;font-family:Georgia,serif;font-size:15px;line-height:20px;color:#4f4f4f}#masthead li{list-style-type:none;float:left;display:inline;margin:0 11px 27px 0}.green-button{display:block;clear:left;width:230px;height:52px;line-height:52px;padding-left:50px;background:url('images/green-button.png') top left no-repeat;color:#fff;font-size:26px;font-weight:bold;text-transform:uppercase;text-shadow:1px 1px 3px #475d05;text-decoration:none;text-align:left}#raster{position:absolute;top:34px;right:17px;z-index:10}#blue-bar{position:relative;z-index:10;background:url('images/blue-bar.gif') no-repeat;width:966px;height:59px;color:#fff;text-shadow:1px 1px 0 #2e5668}#blue-bar ul{font-family:Georgia,serif;font-style:italic;float:right;list-style:none;padding:15px 30px 0 0}#blue-bar li{float:left;border-left:1px solid #fff;padding:0 15px}#blue-bar li:first-child{border-left:0;padding:0 15px 0 0}#blue-bar li a{color:#fff;text-decoration:none}#main{background:url('images/main-bg.gif') top center repeat-y;padding-bottom:50px}#content{float:left;width:610px;margin-left:6px;padding:42px 19px 0 20px}#content h2{font-size:43px;font-weight:normal;text-shadow:1px 1px 0 #fff;padding-bottom:20px;margin-bottom:45px;border-bottom:1px solid #fff;background:url('images/gray-border.png') bottom left repeat-x}.post{margin-bottom:40px}.post-thumbnail{float:left}.post h3{font-size:23px;font-weight:normal;margin:23px 4px 5px 4px}.features{padding-top:7px}.features li{float:left;display:inline;background:url('images/check.gif') center left no-repeat;font-size:12px;padding-left:25px;margin-left:16px}.post pre{margin:5px 10px 5px 25px;padding:4px 4px 4px 15px}.code{font-family:Menlo,Monaco,monospace;font-size:12px;background-color:#eee}.command{font-family:Menlo,Monaco,monospace;font-size:12px;background-color:#444;color:#ddd}.post p{clear:left;padding-left:25px;font-size:14px;line-height:22px;color:#454545}.details{display:inline-block;padding:4px 10px;margin-left:5px;background:#868686;font-family:Verdana,san-serif;font-size:10px;line-height:1em;color:#fff;text-decoration:none;text-transform:lowercase;border-bottom:1px solid #a1a1a1;-webkit-border-radius:2px;-moz-border-radius:2px;border-radius:2px}#sidebar{float:left;width:256px;padding:36px 18px 0 21px}#sidebar h3{font-size:18px;font-weight:normal;text-shadow:1px 1px 0 #e9e9e9;padding-bottom:25px}#preview_update_list{padding-bottom:18px}#preview_update_list li{font-family:Georgia,serif;font-size:13px;line-height:20px;color:#4f4f4f;list-style-type:none;background:url('images/check.gif') no-repeat;background-position:0 4px;padding-left:25px;padding-bottom:10px}#preview_update_list a{color:#969696;text-decoration:none}#preview_update_list a[style="font-size: 85%;"]{display:block}#footer{font-size:11px;font-style:italic;font-family:Georgia,serif;color:#4f4f4f;background:url('images/main-bottom.gif') top center no-repeat;padding:29px 8px 30px 3px}#footer a{color:#4f4f4f;text-decoration:none}.f-left{float:left}.f-right{float:right}#masthead ul:after,#main:after,.post:after,#footer:after{content:".";display:block;height:0;clear:both;visibility:hidden}