diff --git a/messagewebview.cpp b/messagewebview.cpp
index fc61e38c558b991128a74f4259335d4af0585437..7444dbf8cf9b87393816550ae0508c4c4625b984 100644
--- a/messagewebview.cpp
+++ b/messagewebview.cpp
@@ -188,7 +188,7 @@ bool MessageWebView::eventFilter(QObject *watched, QEvent *event)
 
 void MessageWebView::setMessagesContent(const QString& text)
 {
-    page()->runJavaScript(QStringLiteral("document.getElementById('message').value += '%1';").arg(text));
+    page()->runJavaScript(QStringLiteral("replaceText('%1');").arg(text));
 }
 
 void
diff --git a/web/chatview.js b/web/chatview.js
index 51b84d745839fdef7130985b0eb84514477e5248..c4b1bddad3f63c962dbca033d13fab72efaf2bb2 100644
--- a/web/chatview.js
+++ b/web/chatview.js
@@ -1761,3 +1761,28 @@ function pasteKeyDetected(e) {
     e.preventDefault();
     window.jsbridge.emitPasteKeyDetected();
 }
+
+// Set the curser to a target position
+function setCaretPosition(elem, caretPos) {
+    var range;
+
+    if (elem.createTextRange) {
+        range = elem.createTextRange();
+        range.move('character', caretPos);
+        range.select();
+    } else {
+        elem.focus();
+        if (elem.selectionStart !== undefined) {
+            elem.setSelectionRange(caretPos, 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);
+}