diff options
| author | Akshay Nair <phenax5@gmail.com> | 2025-08-04 22:36:56 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2025-08-04 22:36:56 +0530 |
| commit | c7e105ee4254d00f591c4c002f32c223f4c2448a (patch) | |
| tree | 17ebadd5dc1a5e148c4b2f5ed1c70b7c7e54fe1a /src/widgets | |
| parent | 0d1258aee3f39c8d5348588a87e804ec8cd27bd5 (diff) | |
| download | null-browser-c7e105ee4254d00f591c4c002f32c223f4c2448a.tar.gz null-browser-c7e105ee4254d00f591c4c002f32c223f4c2448a.zip | |
Add on_result callback for web.view.run_js
Diffstat (limited to 'src/widgets')
| -rw-r--r-- | src/widgets/BrowserWindow.cpp | 5 | ||||
| -rw-r--r-- | src/widgets/BrowserWindow.hpp | 3 | ||||
| -rw-r--r-- | src/widgets/Decorations.cpp | 5 | ||||
| -rw-r--r-- | src/widgets/Decorations.hpp | 4 | ||||
| -rw-r--r-- | src/widgets/EdgeDecoration.cpp | 4 | ||||
| -rw-r--r-- | src/widgets/EdgeDecoration.hpp | 2 | ||||
| -rw-r--r-- | src/widgets/IWebViewMediator.hpp | 3 | ||||
| -rw-r--r-- | src/widgets/WebView.hpp | 3 | ||||
| -rw-r--r-- | src/widgets/WebViewStack.cpp | 5 | ||||
| -rw-r--r-- | src/widgets/WebViewStack.hpp | 3 |
10 files changed, 24 insertions, 13 deletions
diff --git a/src/widgets/BrowserWindow.cpp b/src/widgets/BrowserWindow.cpp index 87e315c..acb07f7 100644 --- a/src/widgets/BrowserWindow.cpp +++ b/src/widgets/BrowserWindow.cpp @@ -102,8 +102,9 @@ void BrowserWindow::set_html(const QString &html, WebViewId webview_id) { get_webview_mediator(webview_id)->set_html(html, webview_id); } -void BrowserWindow::run_javascript(const QString &js_code, WebViewId webview_id) { - get_webview_mediator(webview_id)->run_javascript(js_code, webview_id); +void BrowserWindow::run_javascript(const QString &js_code, WebViewId webview_id, + const JsOnResultFunc &on_result) { + get_webview_mediator(webview_id)->run_javascript(js_code, webview_id, on_result); } void BrowserWindow::expose_rpc_function(const QString &name, const RpcFunc &action, diff --git a/src/widgets/BrowserWindow.hpp b/src/widgets/BrowserWindow.hpp index de48c6e..2842983 100644 --- a/src/widgets/BrowserWindow.hpp +++ b/src/widgets/BrowserWindow.hpp @@ -38,7 +38,8 @@ public: bool has_webview(WebViewId webview_id); void open_url(const QUrl &url, OpenType open_type, WebViewId webview_id); void set_html(const QString &html, WebViewId webview_id); - void run_javascript(const QString &js_code, WebViewId webview_id); + void run_javascript(const QString &js_code, WebViewId webview_id, + const JsOnResultFunc &on_result); void expose_rpc_function(const QString &name, const RpcFunc &action, WebViewId webview_id); void reload(WebViewId webview_id); diff --git a/src/widgets/Decorations.cpp b/src/widgets/Decorations.cpp index 1cff3d4..22aa9f9 100644 --- a/src/widgets/Decorations.cpp +++ b/src/widgets/Decorations.cpp @@ -84,10 +84,11 @@ void Decorations::set_html(const QString &html, WebViewId view_id) { decoration.value()->set_html(html); } -void Decorations::run_javascript(const QString &js_code, WebViewId view_id) { +void Decorations::run_javascript(const QString &js_code, WebViewId view_id, + const JsOnResultFunc &on_result) { auto decoration = get_decoration_widget_by_view_id(view_id); if (decoration.has_value()) - decoration.value()->run_javascript(js_code); + decoration.value()->run_javascript(js_code, on_result); } std::optional<WebViewId> Decorations::get_view_id(DecorationType type) { diff --git a/src/widgets/Decorations.hpp b/src/widgets/Decorations.hpp index 108b13e..3df4fd7 100644 --- a/src/widgets/Decorations.hpp +++ b/src/widgets/Decorations.hpp @@ -3,6 +3,7 @@ #include "WebViewData.hpp" #include "widgets/EdgeDecoration.hpp" #include "widgets/IWebViewMediator.hpp" +#include "widgets/WebView.hpp" #include <QWidget> #include <QtCore> #include <optional> @@ -29,7 +30,8 @@ public: bool has_webview(WebViewId view_id) override; void open_url(const QUrl &url, OpenType open_type, WebViewId view_id) override; void set_html(const QString &html, WebViewId view_id) override; - void run_javascript(const QString &js_code, WebViewId webview_id) override; + void run_javascript(const QString &js_code, WebViewId webview_id, + const JsOnResultFunc &on_result) override; void expose_rpc_function(const QString &name, const RpcFunc &action, WebViewId webview_id) override; void reload(WebViewId webview_id) override; diff --git a/src/widgets/EdgeDecoration.cpp b/src/widgets/EdgeDecoration.cpp index bb114bf..76974be 100644 --- a/src/widgets/EdgeDecoration.cpp +++ b/src/widgets/EdgeDecoration.cpp @@ -94,10 +94,10 @@ void EdgeDecoration::set_url(const QUrl &url) { webview.value()->setUrl(url); } -void EdgeDecoration::run_javascript(const QString &js_code) { +void EdgeDecoration::run_javascript(const QString &js_code, const JsOnResultFunc &on_result) { if (!webview.has_value()) return; - webview.value()->run_javascript(js_code); + webview.value()->run_javascript(js_code, on_result); } std::optional<WebViewId> EdgeDecoration::get_view_id() { diff --git a/src/widgets/EdgeDecoration.hpp b/src/widgets/EdgeDecoration.hpp index 2c92de7..ed64658 100644 --- a/src/widgets/EdgeDecoration.hpp +++ b/src/widgets/EdgeDecoration.hpp @@ -21,7 +21,7 @@ public: void set_html(const QString &content); void set_enabled(bool enabled_value); void set_url(const QUrl &url); - void run_javascript(const QString &js_code); + void run_javascript(const QString &js_code, const JsOnResultFunc &on_result); std::optional<WebViewId> get_view_id(); void expose_rpc_function(const QString &name, const RpcFunc &action); diff --git a/src/widgets/IWebViewMediator.hpp b/src/widgets/IWebViewMediator.hpp index a7007f2..a5a8fdb 100644 --- a/src/widgets/IWebViewMediator.hpp +++ b/src/widgets/IWebViewMediator.hpp @@ -12,6 +12,7 @@ public: virtual void set_html(const QString &html, WebViewId webview_id) = 0; virtual void expose_rpc_function(const QString &name, const RpcFunc &action, WebViewId webview_id) = 0; - virtual void run_javascript(const QString &js_code, WebViewId webview_id) = 0; + virtual void run_javascript(const QString &js_code, WebViewId webview_id, + const JsOnResultFunc &on_result) = 0; virtual void reload(WebViewId webview_id) = 0; }; diff --git a/src/widgets/WebView.hpp b/src/widgets/WebView.hpp index 36a252d..0f2bd43 100644 --- a/src/widgets/WebView.hpp +++ b/src/widgets/WebView.hpp @@ -20,6 +20,8 @@ using RpcArgs = std::unordered_map<QString, QVariant>; using RpcFunc = std::function<void(RpcArgs)>; +using JsOnResultFunc = std::function<void(const std::optional<QVariant> &value)>; + class WebView : public QWebEngineView { Q_OBJECT @@ -31,6 +33,7 @@ public: void scroll_to_bottom(); void enable_rpc_api(); void expose_rpc_function(const QString &name, const RpcFunc &action); + // void run_javascript(const QString &code, const JsOnResultFunc &on_result); DELEGATE(page(), runJavaScript, run_javascript) DEFINE_GETTER(get_id, id) diff --git a/src/widgets/WebViewStack.cpp b/src/widgets/WebViewStack.cpp index ab5808f..5503a3c 100644 --- a/src/widgets/WebViewStack.cpp +++ b/src/widgets/WebViewStack.cpp @@ -342,14 +342,15 @@ void WebViewStack::set_html(const QString &html, WebViewId webview_id) { webview->setHtml(html); } -void WebViewStack::run_javascript(const QString &js_code, WebViewId webview_id) { +void WebViewStack::run_javascript(const QString &js_code, WebViewId webview_id, + const JsOnResultFunc &on_result) { auto *webview = get_webview(webview_id); if (webview == nullptr) { qDebug() << "Webview does not exist"; return; } - webview->run_javascript(js_code); + webview->run_javascript(js_code, on_result); } void WebViewStack::expose_rpc_function(const QString &name, const RpcFunc & /* unused */, diff --git a/src/widgets/WebViewStack.hpp b/src/widgets/WebViewStack.hpp index bbee44c..cbff0be 100644 --- a/src/widgets/WebViewStack.hpp +++ b/src/widgets/WebViewStack.hpp @@ -62,7 +62,8 @@ public slots: void scroll_to_top(WebViewId webview_id); void scroll_to_bottom(WebViewId webview_id); void set_html(const QString &html, WebViewId webview_id = 0) override; - void run_javascript(const QString &js_code, WebViewId webview_id) override; + void run_javascript(const QString &js_code, WebViewId webview_id, + const JsOnResultFunc &on_result) override; void expose_rpc_function(const QString &name, const RpcFunc &action, WebViewId webview_id) override; void reload(WebViewId webview_id) override; |
