mirror of
https://github.com/encounter/phantomjs.git
synced 2026-03-30 11:35:11 -07:00
0e765f2a95
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. :)
88 lines
2.7 KiB
JavaScript
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";
|
|
}
|