如何转义字符串以确保它是JS源代码中的有效字符串文字?

时间:2016-08-25 11:14:00

标签: javascript c++ qt

我有一个嵌入网络浏览器的Qt应用程序(QWebEngineView)。我想用C ++应用程序中的字符串参数调用javascript函数。这样做的方法是调用

page()->runJavaScript("setContent(\"hello\");");

这适用于简单的情况。但是,如果我尝试加载一个C ++源文件并将其用作setContent的参数,那么这将会中断,因为我不能像这样组装字符串:

auto js = QString("setContent(\"%1\");").arg(fileStr);

我尝试了以下内容:

fileStr = fileStr.replace('"', "\\\"");
fileStr = fileStr.replace("\n", "\\n");

但显然这无法逃脱字符串,我在调用此javascript时出错。如何通过换行符和可能的特殊字符来普遍地转义长字符串,以便我可以像这样构造一个有效的js片段?

1 个答案:

答案 0 :(得分:0)

因此,经过一些研究,我遇到了QWebChannel,它用于应用程序和托管网页之间的双向通信。可以在示例中找到导入的qwebchannel.js here。从那里,这就是我做的:

在C ++中:

  auto channel = new QWebChannel(this);
  page()->setWebChannel(channel);
  channel->registerObject("doc", Doc);

在HTML / JS中:

   new QWebChannel(qt.webChannelTransport,
       function(channel) {
         var doc = channel.objects.doc; // this is "doc" from the registerObject call
         editor.setValue(doc.text);
         doc.textChanged.connect(updateText); // textChanged is a signal of the class of doc.
       }
   );

所以,尽管这并没有直接回答这个问题,但这里提供的内容可以用来达到同样的效果。