diff --git a/src/lib/webengine/webpage.cpp b/src/lib/webengine/webpage.cpp index b321a3785..344748c40 100644 --- a/src/lib/webengine/webpage.cpp +++ b/src/lib/webengine/webpage.cpp @@ -107,15 +107,22 @@ WebView *WebPage::view() const return static_cast(QWebEnginePage::view()); } -QVariant WebPage::execJavaScript(const QString &scriptSource) +QVariant WebPage::execJavaScript(const QString &scriptSource, int timeout) { - QEventLoop loop; + QPointer loop = new QEventLoop; QVariant result; - runJavaScript(scriptSource, [&loop, &result](const QVariant &res) { - result = res; - loop.exit(); + QTimer::singleShot(timeout, loop, &QEventLoop::quit); + + runJavaScript(scriptSource, [loop, &result](const QVariant &res) { + if (loop && loop->isRunning()) { + result = res; + loop->quit(); + } }); - loop.exec(); + + loop->exec(); + delete loop; + return result; } diff --git a/src/lib/webengine/webpage.h b/src/lib/webengine/webpage.h index b02cf9473..abefe2d06 100644 --- a/src/lib/webengine/webpage.h +++ b/src/lib/webengine/webpage.h @@ -50,7 +50,7 @@ public: WebView *view() const; - QVariant execJavaScript(const QString &scriptSource); + QVariant execJavaScript(const QString &scriptSource, int timeout = 500); WebHitTestResult hitTestContent(const QPoint &pos) const;