From c8504f69949acab4ce7a8b9a12eebf1c55dc5d67 Mon Sep 17 00:00:00 2001 From: Ariya Hidayat Date: Mon, 6 Jun 2011 01:31:37 -0700 Subject: [PATCH] Introduce "onLoadFinished" event, fired when loading is completed. It is now possible to specify only the URL in the open() function. The loading callback can be set using onLoadFinished. Example use: var page = new WebPage(); page.onLoadFinished = function () { console.log("Done!"); phantom.exit(); }; page.open("http://example.com"); --- src/bootstrap.js | 20 +++++++++++++++++--- src/webpage.cpp | 2 +- src/webpage.h | 2 +- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/bootstrap.js b/src/bootstrap.js index 2c2f24ef..97ba21b9 100644 --- a/src/bootstrap.js +++ b/src/bootstrap.js @@ -19,6 +19,16 @@ window.WebPage = function() { this.loadStarted.connect(this.handlers.loadStarted); }); + page.__defineSetter__("onLoadFinished", function(f) { + if (this.handlers && typeof this.handlers.loadFinished === 'function') { + try { + this.loadFinished.disconnect(this.handlers.loadFinished); + } catch (e) {} + } + this.handlers.loadFinished = f; + this.loadFinished.connect(this.handlers.loadFinished); + }); + page.onAlert = function (msg) {}; page.onConsoleMessage = function (msg) {}; @@ -30,16 +40,20 @@ window.WebPage = function() { if (typeof this.onConsoleMessage === 'function') { this.javaScriptConsoleMessageSent.connect(this.onConsoleMessage); } + if (arguments.length === 1) { + this.openUrl(arguments[0], 'get', this.settings); + return; + } if (arguments.length === 2) { - this.loadStatusChanged.connect(arguments[1]); + this.onLoadFinished = arguments[1]; this.openUrl(arguments[0], 'get', this.settings); return; } else if (arguments.length === 3) { - this.loadStatusChanged.connect(arguments[2]); + this.onLoadFinished = arguments[2]; this.openUrl(arguments[0], arguments[1], this.settings); return; } else if (arguments.length === 4) { - this.loadStatusChanged.connect(arguments[3]); + this.onLoadFinished = arguments[3]; this.openUrl(arguments[0], { operation: arguments[1], data: arguments[2] diff --git a/src/webpage.cpp b/src/webpage.cpp index de7d0431..0a5aba9b 100644 --- a/src/webpage.cpp +++ b/src/webpage.cpp @@ -239,7 +239,7 @@ void WebPage::emitConsoleMessage(const QString &msg) void WebPage::finish(bool ok) { QString status = ok ? "success" : "fail"; - emit loadStatusChanged(status); + emit loadFinished(status); } void WebPage::openUrl(const QString &address, const QVariant &op, const QVariantMap &settings) diff --git a/src/webpage.h b/src/webpage.h index 515bc61c..bd8e6998 100644 --- a/src/webpage.h +++ b/src/webpage.h @@ -77,7 +77,7 @@ public slots: signals: void loadStarted(); - void loadStatusChanged(const QString &status); + void loadFinished(const QString &status); void javaScriptAlertSent(const QString &msg); void javaScriptConsoleMessageSent(const QString &msg);