diff --git a/src/bootstrap.js b/src/bootstrap.js new file mode 100644 index 00000000..9ad6d0c1 --- /dev/null +++ b/src/bootstrap.js @@ -0,0 +1,12 @@ +// 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(); + + page.open = function (url, callback) { + this.loadStatusChanged.connect(callback); + this.openUrl(url); + }; + + return page; +} diff --git a/src/phantom.cpp b/src/phantom.cpp index d284f4b5..19be1d00 100644 --- a/src/phantom.cpp +++ b/src/phantom.cpp @@ -40,19 +40,6 @@ #include "utils.h" #include "webpage.h" - -// This allows creating a new web page using the construct "new WebPage", -// which feels more natural than "phantom.createWebPage()". -#define CONSTRUCT_WEBPAGE "window.WebPage = function(){\n" \ - "var page = phantom.createWebPage();\n" \ - "page.open = function (url, callback) {\n" \ - " this.loadStatusChanged.connect(callback);\n" \ - " this.openUrl(url);\n" \ - "};" \ - "return page;" \ - "}" - - Phantom::Phantom(QObject *parent) : QObject(parent) , m_returnValue(0) @@ -152,31 +139,30 @@ Phantom::Phantom(QObject *parent) m_args += arg; } -#if 0 // Provide WebPage with a non-standard Network Access Manager m_netAccessMan = new NetworkAccessManager(this, diskCacheEnabled, ignoreSslErrors); m_page->setNetworkAccessManager(m_netAccessMan); +#if 0 m_page->settings()->setAttribute(QWebSettings::AutoLoadImages, autoLoadImages); m_page->settings()->setAttribute(QWebSettings::PluginsEnabled, pluginsEnabled); - m_page->settings()->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled, true); - m_page->settings()->setOfflineStoragePath(QDesktopServices::storageLocation(QDesktopServices::DataLocation)); - - m_page->settings()->setAttribute(QWebSettings::LocalStorageDatabaseEnabled, true); - -#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0) - m_page->settings()->setAttribute(QWebSettings::FrameFlatteningEnabled, true); -#endif - -#if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0) - m_page->settings()->setAttribute(QWebSettings::LocalStorageEnabled, true); - m_page->settings()->setLocalStoragePath(QDesktopServices::storageLocation(QDesktopServices::DataLocation)); -#endif #endif m_page->mainFrame()->addToJavaScriptWindowObject("phantom", this); - m_page->mainFrame()->evaluateJavaScript(CONSTRUCT_WEBPAGE); + + QFile file(":/bootstrap.js"); + if (!file.open(QFile::ReadOnly)) { + qCritical() << "Can not bootstrap!"; + exit(1); + } + QString bootstrapper = QString::fromUtf8(file.readAll()); + file.close(); + if (bootstrapper.isEmpty()) { + qCritical() << "Can not bootstrap!"; + exit(1); + } + m_page->mainFrame()->evaluateJavaScript(bootstrapper); } QStringList Phantom::args() const @@ -229,7 +215,9 @@ QVariantMap Phantom::version() const QObject *Phantom::createWebPage() { - return new WebPage(this); + WebPage *page = new WebPage(this); + page->setNetworkAccessManager(m_netAccessMan); + return page; } void Phantom::exit(int code) diff --git a/src/phantomjs.qrc b/src/phantomjs.qrc index 6a1bff70..0669a16c 100644 --- a/src/phantomjs.qrc +++ b/src/phantomjs.qrc @@ -3,5 +3,6 @@ phantomjs-icon.png coffee-script.js usage.txt + bootstrap.js diff --git a/src/webpage.cpp b/src/webpage.cpp index 3e827faf..7fd5cf4e 100644 --- a/src/webpage.cpp +++ b/src/webpage.cpp @@ -34,6 +34,7 @@ #include #include +#include #include #include #include @@ -98,6 +99,20 @@ WebPage::WebPage(QObject *parent) m_mainFrame->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff); m_mainFrame->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff); + m_webPage->settings()->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled, true); + m_webPage->settings()->setOfflineStoragePath(QDesktopServices::storageLocation(QDesktopServices::DataLocation)); + + m_webPage->settings()->setAttribute(QWebSettings::LocalStorageDatabaseEnabled, true); + +#if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0) + m_webPage->settings()->setAttribute(QWebSettings::FrameFlatteningEnabled, true); +#endif + +#if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0) + m_webPage->settings()->setAttribute(QWebSettings::LocalStorageEnabled, true); + m_webPage->settings()->setLocalStoragePath(QDesktopServices::storageLocation(QDesktopServices::DataLocation)); +#endif + // Ensure we have at least document.body. m_mainFrame->setHtml(""); @@ -109,6 +124,11 @@ QWebFrame *WebPage::mainFrame() return m_mainFrame; } +void WebPage::setNetworkAccessManager(QNetworkAccessManager *networkAccessManager) +{ + m_webPage->setNetworkAccessManager(networkAccessManager); +} + QString WebPage::content() const { return m_mainFrame->toHtml(); diff --git a/src/webpage.h b/src/webpage.h index 6b49c105..b0f08f98 100644 --- a/src/webpage.h +++ b/src/webpage.h @@ -50,6 +50,7 @@ public: WebPage(QObject *parent = 0); QWebFrame *mainFrame(); + void setNetworkAccessManager(QNetworkAccessManager *networkAccessManager); QString content() const; void setContent(const QString &content);