我怎么能转义字符串,以确保它是一个有效的字符串文字在JS源

How can I escape a string to ensure that it is a valid string literal in JS source?

本文关键字:字符串 有效 一个 文字 JS 转义字符 转义 怎么能 确保      更新时间:2023-10-16

我有一个嵌入web浏览器(QWebEngineView)的Qt应用程序。我想从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片段像这样?

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

在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.
       }
   );

因此,尽管这并不能直接回答问题,但这里呈现的内容可以达到相同的效果。