diff --git a/src/web-chatview/chatview.js b/src/web-chatview/chatview.js
index e0b4d573cbb5798d5f9ad043ae6e5d1f5b283d66..d13ee9bd7d574eadb45c715d066c1878d8149ef4 100644
--- a/src/web-chatview/chatview.js
+++ b/src/web-chatview/chatview.js
@@ -119,6 +119,11 @@ if (use_qt) {
     }
     new QWebChannel(qt.webChannelTransport, function (channel) {
         window.jsbridge = channel.objects.jsbridge
+
+        // connect to a signal
+        window.jsbridge.setSendMessageContentRequest.connect(function(content) {
+            setSendMessageContent(content)
+        });
     })
 }
 
@@ -2457,15 +2462,21 @@ function setCaretPosition(elem, caretPos) {
     }
 }
 
-function replaceText(text) {
-    var input = messageBarInput
-    var currentContent = input.value
-    var start = input.selectionStart
-    var end = input.selectionEnd
-    var output = [currentContent.slice(0, start), text, currentContent.slice(end)].join("")
-    input.value = output
-    setCaretPosition(input, start + text.length)
-    grow_text_area()
+function replaceText() {
+    navigator.clipboard.readText()
+        .then(text => {
+            var input = messageBarInput
+            var currentContent = input.value
+            var start = input.selectionStart
+            var end = input.selectionEnd
+            var output = [currentContent.slice(0, start), text, currentContent.slice(end)].join("")
+            input.value = output
+            setCaretPosition(input, start + text.length)
+            grow_text_area()
+        })
+        .catch(err => {
+            console.error('Failed to read clipboard contents: ', err)
+        })
 }
 
 /**