summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Strømme <[email protected]>2015-01-20 16:40:56 +0100
committerChristian Stromme <[email protected]>2015-02-09 16:36:08 +0000
commitadbc7e878fe68f5e1d05745ecb6a40ce7a4b31df (patch)
tree90626d8250a65493f52aa99b130de7be1eab71a1
parentb8fc57ba4aa5b25ae31df0ec74c62730dd0fa9d0 (diff)
Add loadHtml() function on Android and iOS.
This adds a loadHtml() function to the WebView, making it possible for the user to set the HTML content of the WebView. [ChangeLog][WebView] Added loadHtml() function. Task-number: QTBUG-42335 Change-Id: I8a044e4fb2c0fc4bacff049f02a8cb525d593e15 Reviewed-by: Friedemann Kleint <[email protected]> Reviewed-by: Eskil Abrahamsen Blomfeldt <[email protected]>
-rw-r--r--src/imports/plugins.qmltypes9
-rw-r--r--src/webview/qquickwebview.cpp21
-rw-r--r--src/webview/qquickwebview.h1
-rw-r--r--src/webview/qwebview.cpp6
-rw-r--r--src/webview/qwebview_android.cpp20
-rw-r--r--src/webview/qwebview_android_p.h1
-rw-r--r--src/webview/qwebview_ios.mm5
-rw-r--r--src/webview/qwebview_ios_p.h1
-rw-r--r--src/webview/qwebview_p.h1
-rw-r--r--src/webview/qwebviewinterface_p.h1
-rw-r--r--tests/auto/webview/qwebview/tst_qwebview.cpp11
11 files changed, 77 insertions, 0 deletions
diff --git a/src/imports/plugins.qmltypes b/src/imports/plugins.qmltypes
index a0a57bf..3532199 100644
--- a/src/imports/plugins.qmltypes
+++ b/src/imports/plugins.qmltypes
@@ -21,6 +21,15 @@ Module {
Method { name: "reload" }
Method { name: "stop" }
Method {
+ name: "loadHtml"
+ Parameter { name: "html"; type: "string" }
+ Parameter { name: "baseUrl"; type: "QUrl" }
+ }
+ Method {
+ name: "loadHtml"
+ Parameter { name: "html"; type: "string" }
+ }
+ Method {
name: "runJavaScript"
Parameter { name: "script"; type: "string" }
Parameter { name: "callback"; type: "QJValue" }
diff --git a/src/webview/qquickwebview.cpp b/src/webview/qquickwebview.cpp
index 1803994..d825d2f 100644
--- a/src/webview/qquickwebview.cpp
+++ b/src/webview/qquickwebview.cpp
@@ -219,6 +219,27 @@ void QQuickWebView::stop()
}
/*!
+ \qmlmethod void QtWebView::WebView::loadHtml(string html, url baseUrl)
+
+ Loads the specified \a html content to the web view.
+
+ This method offers a lower-level alternative to the \c{url} property,
+ which references HTML pages via URL.
+
+ External objects such as stylesheets or images referenced in the HTML
+ document should be located relative to \a baseUrl. For example, if \a html
+ is retrieved from \c http://www.example.com/documents/overview.html, which
+ is the base url, then an image referenced with the relative url, \c diagram.png,
+ should be at \c{http://www.example.com/documents/diagram.png}.
+
+ \sa QtWebView::WebView::url
+*/
+void QQuickWebView::loadHtml(const QString &html, const QUrl &baseUrl)
+{
+ m_webView->loadHtml(html, baseUrl);
+}
+
+/*!
\qmlmethod void QtWebView::WebView::runJavaScript(string script, variant callback)
Runs the specified JavaScript.
diff --git a/src/webview/qquickwebview.h b/src/webview/qquickwebview.h
index c36cc9d..8b2207a 100644
--- a/src/webview/qquickwebview.h
+++ b/src/webview/qquickwebview.h
@@ -84,6 +84,7 @@ public Q_SLOTS:
void goForward() Q_DECL_OVERRIDE;
void reload() Q_DECL_OVERRIDE;
void stop() Q_DECL_OVERRIDE;
+ void loadHtml(const QString &html, const QUrl &baseUrl = QUrl()) Q_DECL_OVERRIDE;
void runJavaScript(const QString& script,
const QJSValue &callback = QJSValue());
diff --git a/src/webview/qwebview.cpp b/src/webview/qwebview.cpp
index 1865c7e..8c1b804 100644
--- a/src/webview/qwebview.cpp
+++ b/src/webview/qwebview.cpp
@@ -152,6 +152,12 @@ void QWebView::setFocus(bool focus)
d->setFocus(focus);
}
+void QWebView::loadHtml(const QString &html, const QUrl &baseUrl)
+{
+ Q_D(QWebView);
+ d->loadHtml(html, baseUrl);
+}
+
void QWebView::runJavaScriptPrivate(const QString &script,
int callbackId)
{
diff --git a/src/webview/qwebview_android.cpp b/src/webview/qwebview_android.cpp
index 1ff4271..b7e19b6 100644
--- a/src/webview/qwebview_android.cpp
+++ b/src/webview/qwebview_android.cpp
@@ -113,6 +113,26 @@ void QAndroidWebViewPrivate::setUrl(const QUrl &url)
QJNIObjectPrivate::fromString(url.toString()).object());
}
+void QAndroidWebViewPrivate::loadHtml(const QString &html, const QUrl &baseUrl)
+{
+ const QJNIObjectPrivate &htmlString = QJNIObjectPrivate::fromString(html);
+ const QJNIObjectPrivate &mimeTypeString = QJNIObjectPrivate::fromString(QLatin1String("text/html;charset=UTF-8"));
+
+ baseUrl.isEmpty() ? m_viewController.callMethod<void>("loadData",
+ "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V",
+ htmlString.object(),
+ mimeTypeString.object(),
+ 0)
+
+ : m_viewController.callMethod<void>("loadDataWithBaseURL",
+ "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V",
+ QJNIObjectPrivate::fromString(baseUrl.toString()).object(),
+ htmlString.object(),
+ mimeTypeString.object(),
+ 0,
+ 0);
+}
+
bool QAndroidWebViewPrivate::canGoBack() const
{
return m_viewController.callMethod<jboolean>("canGoBack");
diff --git a/src/webview/qwebview_android_p.h b/src/webview/qwebview_android_p.h
index 45a0213..fdf9ac5 100644
--- a/src/webview/qwebview_android_p.h
+++ b/src/webview/qwebview_android_p.h
@@ -82,6 +82,7 @@ public Q_SLOTS:
void goForward() Q_DECL_OVERRIDE;
void reload() Q_DECL_OVERRIDE;
void stop() Q_DECL_OVERRIDE;
+ void loadHtml(const QString &html, const QUrl &baseUrl = QUrl()) Q_DECL_OVERRIDE;
protected:
void runJavaScriptPrivate(const QString& script,
diff --git a/src/webview/qwebview_ios.mm b/src/webview/qwebview_ios.mm
index b9fdff9..c2c09c9 100644
--- a/src/webview/qwebview_ios.mm
+++ b/src/webview/qwebview_ios.mm
@@ -202,6 +202,11 @@ void QIosWebViewPrivate::setUrl(const QUrl &url)
[uiWebView loadRequest:[NSURLRequest requestWithURL:url.toNSURL()]];
}
+void QIosWebViewPrivate::loadHtml(const QString &html, const QUrl &baseUrl)
+{
+ [uiWebView loadHTMLString:html.toNSString() baseURL:baseUrl.toNSURL()];
+}
+
bool QIosWebViewPrivate::canGoBack() const
{
return uiWebView.canGoBack;
diff --git a/src/webview/qwebview_ios_p.h b/src/webview/qwebview_ios_p.h
index 8302a68..864d5f1 100644
--- a/src/webview/qwebview_ios_p.h
+++ b/src/webview/qwebview_ios_p.h
@@ -85,6 +85,7 @@ public Q_SLOTS:
void goForward() Q_DECL_OVERRIDE;
void reload() Q_DECL_OVERRIDE;
void stop() Q_DECL_OVERRIDE;
+ void loadHtml(const QString &html, const QUrl &baseUrl = QUrl()) Q_DECL_OVERRIDE;
protected:
void runJavaScriptPrivate(const QString& script,
diff --git a/src/webview/qwebview_p.h b/src/webview/qwebview_p.h
index 578403a..7ecacd8 100644
--- a/src/webview/qwebview_p.h
+++ b/src/webview/qwebview_p.h
@@ -87,6 +87,7 @@ public Q_SLOTS:
void goForward() Q_DECL_OVERRIDE;
void reload() Q_DECL_OVERRIDE;
void stop() Q_DECL_OVERRIDE;
+ void loadHtml(const QString &html, const QUrl &baseUrl = QUrl()) Q_DECL_OVERRIDE;
Q_SIGNALS:
void titleChanged();
diff --git a/src/webview/qwebviewinterface_p.h b/src/webview/qwebviewinterface_p.h
index ef02042..7cc9dc4 100644
--- a/src/webview/qwebviewinterface_p.h
+++ b/src/webview/qwebviewinterface_p.h
@@ -76,6 +76,7 @@ public:
virtual void goForward() = 0;
virtual void stop() = 0;
virtual void reload() = 0;
+ virtual void loadHtml(const QString &html, const QUrl &baseUrl = QUrl()) = 0;
virtual void runJavaScriptPrivate(const QString &script,
int callbackId) = 0;
diff --git a/tests/auto/webview/qwebview/tst_qwebview.cpp b/tests/auto/webview/qwebview/tst_qwebview.cpp
index 9702324..bde8545 100644
--- a/tests/auto/webview/qwebview/tst_qwebview.cpp
+++ b/tests/auto/webview/qwebview/tst_qwebview.cpp
@@ -60,6 +60,7 @@ private slots:
void initTestCase();
void load();
void runJavaScript();
+ void loadHtml();
private:
const QString m_cacheLocation;
@@ -123,6 +124,16 @@ void tst_QWebView::runJavaScript()
#endif // QT_NO_QQUICKWEBVIEW_TESTS
}
+void tst_QWebView::loadHtml()
+{
+ QWebView view;
+ QCOMPARE(view.loadProgress(), 0);
+ view.loadHtml(QString("<html><head><title>WebViewTitle</title></head><body />"));
+ QTRY_COMPARE(view.loadProgress(), 100);
+ QTRY_VERIFY(!view.isLoading());
+ QCOMPARE(view.title(), QStringLiteral("WebViewTitle"));
+}
+
QTEST_MAIN(tst_QWebView)
#include "tst_qwebview.moc"