diff --git a/src/CurrentUrl.cpp b/src/CurrentUrl.cpp index d00aab33..93310053 100644 --- a/src/CurrentUrl.cpp +++ b/src/CurrentUrl.cpp @@ -6,8 +6,24 @@ CurrentUrl::CurrentUrl(WebPageManager *manager, QStringList &arguments, QObject } void CurrentUrl::start() { +#if QT_VERSION >= QT_VERSION_CHECK(4, 8, 0) QStringList arguments; QVariant result = page()->invokeCapybaraFunction("currentUrl", arguments); QString url = result.toString(); emit finished(new Response(true, url)); +#else + QUrl humanUrl = wasRedirectedAndNotModifiedByJavascript() ? + page()->currentFrame()->url() : page()->currentFrame()->requestedUrl(); + QByteArray encodedBytes = humanUrl.toEncoded(); + emit finished(new Response(true, encodedBytes)); } + +bool CurrentUrl::wasRegularLoad() { + return page()->currentFrame()->url() == page()->currentFrame()->requestedUrl(); +} + +bool CurrentUrl::wasRedirectedAndNotModifiedByJavascript() { + return !wasRegularLoad() && page()->currentFrame()->url() == page()->history()->currentItem().url(); +#endif +} + diff --git a/src/CurrentUrl.h b/src/CurrentUrl.h index 2448ab97..14794be5 100644 --- a/src/CurrentUrl.h +++ b/src/CurrentUrl.h @@ -6,5 +6,11 @@ class CurrentUrl : public SocketCommand { public: CurrentUrl(WebPageManager *, QStringList &arguments, QObject *parent = 0); virtual void start(); +#if QT_VERSION < QT_VERSION_CHECK(4, 8, 0) + + private: + bool wasRegularLoad(); + bool wasRedirectedAndNotModifiedByJavascript(); +#endif }; diff --git a/src/WebPageManager.cpp b/src/WebPageManager.cpp index 37b0204e..d2ed1fad 100644 --- a/src/WebPageManager.cpp +++ b/src/WebPageManager.cpp @@ -100,6 +100,7 @@ void WebPageManager::reset() { m_pages.first()->deleteLater(); m_pages.clear(); createPage(this)->setFocus(); + currentPage()->currentFrame()->setUrl(QUrl("about:blank")); } NetworkCookieJar *WebPageManager::cookieJar() {