diff --git a/src/mainview/components/MessageWebView.qml b/src/mainview/components/MessageWebView.qml
index 1cb9242e90c3e75ce66f7b3a8f5122a4c23d7a43..98bdd48df7ba2fe1e30625aed61676eef4a24c4c 100644
--- a/src/mainview/components/MessageWebView.qml
+++ b/src/mainview/components/MessageWebView.qml
@@ -232,6 +232,13 @@ Rectangle {
             }
         }
 
+        onNavigationRequested: {
+            if(request.navigationType === WebEngineView.LinkClickedNavigation) {
+                MessagesAdapter.openUrl(request.url)
+                request.action = WebEngineView.IgnoreRequest
+            }
+        }
+
         onLoadingChanged: {
             if (loadRequest.status == WebEngineView.LoadSucceededStatus) {
                 messageWebView.runJavaScript(ClientWrapper.utilsAdaptor.getStyleSheet(
diff --git a/src/messagesadapter.cpp b/src/messagesadapter.cpp
index 1220aeb45838850793d65ca4ac392b88a62ae9c4..314d7b93311811847e5ffe749482aaf7454d94ea 100644
--- a/src/messagesadapter.cpp
+++ b/src/messagesadapter.cpp
@@ -332,6 +332,14 @@ MessagesAdapter::openFile(const QString &arg)
     }
 }
 
+void
+MessagesAdapter::openUrl(const QString &url)
+{
+    if (!QDesktopServices::openUrl(url)) {
+        qDebug() << "Couldn't open url: " << url;
+    }
+}
+
 void
 MessagesAdapter::acceptFile(const QString &arg)
 {
diff --git a/src/messagesadapter.h b/src/messagesadapter.h
index 7a0c2f9e4a9789225990f2b1c26c8f0d0bfe9d5e..352cc3eec0cc24704b35dc35e66286553baad0b9 100644
--- a/src/messagesadapter.h
+++ b/src/messagesadapter.h
@@ -49,6 +49,7 @@ public:
     Q_INVOKABLE void sendFile(const QString &message);
     Q_INVOKABLE void retryInteraction(const QString &arg);
     Q_INVOKABLE void deleteInteraction(const QString &arg);
+    Q_INVOKABLE void openUrl(const QString &url);
     Q_INVOKABLE void openFile(const QString &arg);
     Q_INVOKABLE void acceptFile(const QString &arg);
     Q_INVOKABLE void refuseFile(const QString &arg);