Files
phantomjs/python/pyphantomjs/bootstrap.js
T
IceArmy 0e765f2a95 Exit program properly when we call phantom.exit
Previously, calling phantom.exit would set the exit code and finish running the
JavaScript until it was done, then exit the program with your code. Basically
it didn't actually exit the program. It caused many code fallthrough problems,
but is now fixed. :)
2011-06-19 01:20:45 -07:00

88 lines
2.7 KiB
JavaScript

// This allows creating a new web page using the construct "new WebPage",
// which feels more natural than "phantom.createWebPage()".
window.WebPage = function() {
var page = phantom.createWebPage(),
handlers = {};
function defineSetter(handlerName, signalName) {
page.__defineSetter__(handlerName, function(f) {
if (handlers && typeof handlers[signalName] === 'function') {
try {
this[signalName].disconnect(handlers[signalName]);
} catch (e) {}
}
handlers[signalName] = f;
this[signalName].connect(handlers[signalName]);
});
}
// deep copy
page.settings = JSON.parse(JSON.stringify(phantom.defaultPageSettings));
defineSetter("onLoadStarted", "loadStarted");
defineSetter("onLoadFinished", "loadFinished");
defineSetter("onResourceRequested", "resourceRequested");
defineSetter("onResourceReceived", "resourceReceived");
defineSetter("onAlert", "javaScriptAlertSent");
defineSetter("onConsoleMessage", "javaScriptConsoleMessageSent");
page.open = function () {
if (arguments.length === 1) {
this.openUrl(arguments[0], 'get', this.settings);
return;
}
if (arguments.length === 2) {
this.onLoadFinished = arguments[1];
this.openUrl(arguments[0], 'get', this.settings);
return;
} else if (arguments.length === 3) {
this.onLoadFinished = arguments[2];
this.openUrl(arguments[0], arguments[1], this.settings);
return;
} else if (arguments.length === 4) {
this.onLoadFinished = arguments[3];
this.openUrl(arguments[0], {
operation: arguments[1],
data: arguments[2]
}, this.settings);
return;
}
throw "Wrong use of WebPage#open";
};
page.includeJs = function(scriptUrl, onScriptLoaded) {
// Register temporary signal handler for 'alert()'
this.javaScriptAlertSent.connect(function(msgFromAlert) {
if ( msgFromAlert === scriptUrl ) {
// Resource loaded, time to fire the callback
onScriptLoaded(scriptUrl);
// And disconnect the signal handler
try {
this.javaScriptAlertSent.disconnect(this);
} catch (e) {}
}
});
// Append the script tag to the body
this._appendScriptElement(scriptUrl);
};
return page;
}
phantom.exit = function(code) {
if (code == null) {
code = 0;
}
phantom._exit(code);
// halt javascript execution
throw "phantom.exit";
}