diff options
5 files changed, 63 insertions, 24 deletions
diff --git a/examples/webenginewidgets/browser/browserapplication.cpp b/examples/webenginewidgets/browser/browserapplication.cpp index ac3925d51..b1426ea24 100644 --- a/examples/webenginewidgets/browser/browserapplication.cpp +++ b/examples/webenginewidgets/browser/browserapplication.cpp @@ -68,6 +68,8 @@ #include <QWebEngineProfile> #include <QWebEngineSettings> +#include <QWebEngineScript> +#include <QWebEngineScriptCollection> #include <QtCore/QDebug> @@ -76,6 +78,41 @@ HistoryManager *BrowserApplication::s_historyManager = 0; QNetworkAccessManager *BrowserApplication::s_networkAccessManager = 0; BookmarksManager *BrowserApplication::s_bookmarksManager = 0; +static void setUserStyleSheet(QWebEngineProfile *profile, const QString &styleSheet, BrowserMainWindow *mainWindow = 0) +{ + Q_ASSERT(profile); + QString scriptName(QStringLiteral("userStyleSheet")); + QWebEngineScript script; + QList<QWebEngineScript> styleSheets = profile->scripts().findScripts(scriptName); + if (!styleSheets.isEmpty()) + script = styleSheets.first(); + Q_FOREACH (const QWebEngineScript &s, styleSheets) + profile->scripts().remove(s); + + if (script.isNull()) { + script.setName(scriptName); + script.setInjectionPoint(QWebEngineScript::DocumentReady); + script.setRunsOnSubFrames(true); + script.setWorldId(QWebEngineScript::ApplicationWorld); + } + QString source = QString::fromLatin1("(function() {"\ + "var css = document.getElementById(\"_qt_testBrowser_userStyleSheet\");"\ + "if (css == undefined) {"\ + " css = document.createElement(\"style\");"\ + " css.type = \"text/css\";"\ + " css.id = \"_qt_testBrowser_userStyleSheet\";"\ + " document.head.appendChild(css);"\ + "}"\ + "css.innerText = \"%1\";"\ + "})()").arg(styleSheet); + script.setSourceCode(source); + profile->scripts().insert(script); + // run the script on the already loaded views + // this has to be deferred as it could mess with the storage initialization on startup + if (mainWindow) + QMetaObject::invokeMethod(mainWindow, "runScriptOnOpenViews", Qt::QueuedConnection, Q_ARG(QString, source)); +} + BrowserApplication::BrowserApplication(int &argc, char **argv) : QApplication(argc, argv) , m_localServer(0) @@ -254,10 +291,9 @@ void BrowserApplication::loadSettings() defaultSettings->setAttribute(QWebEngineSettings::PluginsEnabled, settings.value(QLatin1String("enablePlugins"), true).toBool()); #endif -#if defined(QTWEBENGINE_USERSTYLESHEET) - QUrl url = settings.value(QLatin1String("userStyleSheet")).toUrl(); - defaultSettings->setUserStyleSheetUrl(url); -#endif + QString css = settings.value(QLatin1String("userStyleSheet")).toString(); + setUserStyleSheet(defaultProfile, css, mainWindow()); + defaultProfile->setHttpUserAgent(settings.value(QLatin1String("httpUserAgent")).toString()); settings.endGroup(); settings.beginGroup(QLatin1String("cookies")); diff --git a/examples/webenginewidgets/browser/browsermainwindow.cpp b/examples/webenginewidgets/browser/browsermainwindow.cpp index b50343942..98f61d6cb 100644 --- a/examples/webenginewidgets/browser/browsermainwindow.cpp +++ b/examples/webenginewidgets/browser/browsermainwindow.cpp @@ -269,6 +269,12 @@ bool BrowserMainWindow::restoreState(const QByteArray &state) return true; } +void BrowserMainWindow::runScriptOnOpenViews(const QString &source) +{ + for (int i =0; i < tabWidget()->count(); ++i) + tabWidget()->webView(i)->page()->runJavaScript(source); +} + void BrowserMainWindow::setupMenu() { new QShortcut(QKeySequence(Qt::Key_F6), this, SLOT(slotSwapFocus())); diff --git a/examples/webenginewidgets/browser/browsermainwindow.h b/examples/webenginewidgets/browser/browsermainwindow.h index 99a5e55b0..831504700 100644 --- a/examples/webenginewidgets/browser/browsermainwindow.h +++ b/examples/webenginewidgets/browser/browsermainwindow.h @@ -77,6 +77,7 @@ public: WebView *currentTab() const; QByteArray saveState(bool withTabs = true) const; bool restoreState(const QByteArray &state); + Q_INVOKABLE void runScriptOnOpenViews(const QString &); public slots: void loadPage(const QString &url); diff --git a/examples/webenginewidgets/browser/settings.cpp b/examples/webenginewidgets/browser/settings.cpp index 6169f72a3..7ed5f707b 100644 --- a/examples/webenginewidgets/browser/settings.cpp +++ b/examples/webenginewidgets/browser/settings.cpp @@ -137,7 +137,7 @@ void SettingsDialog::loadFromSettings() enableJavascript->setChecked(settings.value(QLatin1String("enableJavascript"), enableJavascript->isChecked()).toBool()); enablePlugins->setChecked(settings.value(QLatin1String("enablePlugins"), enablePlugins->isChecked()).toBool()); - userStyleSheet->setText(settings.value(QLatin1String("userStyleSheet")).toUrl().toString()); + userStyleSheet->setPlainText(settings.value(QLatin1String("userStyleSheet")).toString()); enableScrollAnimator->setChecked(settings.value(QLatin1String("enableScrollAnimator"), enableScrollAnimator->isChecked()).toBool()); httpUserAgent->setText(settings.value(QLatin1String("httpUserAgent"), httpUserAgent->text()).toString()); settings.endGroup(); @@ -196,11 +196,7 @@ void SettingsDialog::saveToSettings() settings.setValue(QLatin1String("enableJavascript"), enableJavascript->isChecked()); settings.setValue(QLatin1String("enablePlugins"), enablePlugins->isChecked()); settings.setValue(QLatin1String("enableScrollAnimator"), enableScrollAnimator->isChecked()); - QString userStyleSheetString = userStyleSheet->text(); - if (QFile::exists(userStyleSheetString)) - settings.setValue(QLatin1String("userStyleSheet"), QUrl::fromLocalFile(userStyleSheetString)); - else - settings.setValue(QLatin1String("userStyleSheet"), QUrl(userStyleSheetString)); + settings.setValue(QLatin1String("userStyleSheet"), userStyleSheet->toPlainText()); settings.setValue(QLatin1String("httpUserAgent"), httpUserAgent->text()); settings.endGroup(); diff --git a/examples/webenginewidgets/browser/settings.ui b/examples/webenginewidgets/browser/settings.ui index 7cafdae4b..11bdee4d3 100644 --- a/examples/webenginewidgets/browser/settings.ui +++ b/examples/webenginewidgets/browser/settings.ui @@ -499,17 +499,27 @@ <string>Advanced</string> </attribute> <layout class="QGridLayout" name="gridLayout_2"> + <item row="2" column="1"> + <widget class="QTextEdit" name="userStyleSheet"/> + </item> + <item row="0" column="1"> + <widget class="QLineEdit" name="httpUserAgent"/> + </item> <item row="0" column="0"> + <widget class="QLabel" name="label_15"> + <property name="text"> + <string>HTTP User-Agent:</string> + </property> + </widget> + </item> + <item row="2" column="0"> <widget class="QLabel" name="label_14"> <property name="text"> <string>Style Sheet:</string> </property> </widget> </item> - <item row="0" column="1"> - <widget class="QLineEdit" name="userStyleSheet"/> - </item> - <item row="2" column="1"> + <item row="4" column="1"> <spacer name="verticalSpacer_3"> <property name="orientation"> <enum>Qt::Vertical</enum> @@ -522,16 +532,6 @@ </property> </spacer> </item> - <item row="1" column="1"> - <widget class="QLineEdit" name="httpUserAgent"/> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_15"> - <property name="text"> - <string>HTTP User-Agent:</string> - </property> - </widget> - </item> </layout> </widget> </widget> |