diff --git a/src/mainview/components/MessageWebView.qml b/src/mainview/components/MessageWebView.qml
index c749eb522c39ee6cf76604ad58ef4ec6b1198c81..f68392daf14f6e126c3cf37606b090f49cb8875c 100644
--- a/src/mainview/components/MessageWebView.qml
+++ b/src/mainview/components/MessageWebView.qml
@@ -43,6 +43,10 @@ Rectangle {
     signal messagesCleared
     signal messagesLoaded
 
+    function setSendMessageContent(content) {
+        jsBridgeObject.setSendMessageContentRequest(content)
+    }
+
     function focusMessageWebView() {
         messageWebView.forceActiveFocus()
     }
@@ -140,6 +144,10 @@ Rectangle {
         // ID, under which this object will be known at chatview.js side.
         WebChannel.id: "jsbridge"
 
+        // signals to trigger functions in chatview.js
+        // mainly used to avoid input arg string escape
+        signal setSendMessageContentRequest(string content)
+
         // Functions that are exposed, return code can be derived from js side
         // by setting callback function.
         function deleteInteraction(arg) {
@@ -240,6 +248,8 @@ Rectangle {
 
         settings.javascriptEnabled: true
         settings.javascriptCanOpenWindows: true
+        settings.javascriptCanAccessClipboard: true
+        settings.javascriptCanPaste: true
         settings.fullScreenSupportEnabled: true
         settings.allowRunningInsecureContent: true
         settings.localContentCanAccessRemoteUrls: true
diff --git a/src/messagesadapter.cpp b/src/messagesadapter.cpp
index 819285bd3ce0560ad9d2d864c84d2e1e315917ab..d085f57b67bafb7d2cf7967b18af5218232800ab 100644
--- a/src/messagesadapter.cpp
+++ b/src/messagesadapter.cpp
@@ -421,10 +421,11 @@ MessagesAdapter::pasteKeyDetected()
             }
         }
     } else {
+        // Treat as text content, make chatview.js handle in order to
+        // avoid string escape problems
         QMetaObject::invokeMethod(qmlObj_,
                                   "webViewRunJavaScript",
-                                  Q_ARG(QVariant,
-                                        QStringLiteral("replaceText(`%1`)").arg(mimeData->text())));
+                                  Q_ARG(QVariant, QStringLiteral("replaceText()")));
     }
 }
 
@@ -640,8 +641,7 @@ MessagesAdapter::removeInteraction(uint64_t interactionId)
 void
 MessagesAdapter::setSendMessageContent(const QString& content)
 {
-    QString s = QString::fromLatin1("setSendMessageContent(`%1`);").arg(content);
-    QMetaObject::invokeMethod(qmlObj_, "webViewRunJavaScript", Q_ARG(QVariant, s));
+    QMetaObject::invokeMethod(qmlObj_, "setSendMessageContent", Q_ARG(QVariant, content));
 }
 
 void