我怎么能转义字符串,以确保它是一个有效的字符串文字在JS源
How can I escape a string to ensure that it is a valid string literal in JS source?
我有一个嵌入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.
}
);
因此,尽管这并不能直接回答问题,但这里呈现的内容可以达到相同的效果。
相关文章:
- 有哪些有效的方法可以消除一组 100 万个字符串>重复数据?
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 如何正确解析子字符串,以便它们对我的新手计算器有效?
- C++程序在将 int 与 cin 一起使用时有效,但不能使用字符串
- 如何检查字符串格式在读取C++文本文件时是否有效?
- 创建字符串数组的有效方法
- 访问包含P的有效索引时返回空格的C++字符串
- 如何有效地将一个大std::字符串的一部分转换为float
- C++Int有效地字符串
- 是否有更有效的方法来生成日期的REGEX字符串
- 是什么使这个以'+'开头的字符串添加成为有效的语句?
- 为C++字符串中的特殊符号 (") 赋予文字含义的有效C++方法
- 拆分字符串输入并查找字符是否有效
- 设计返回有效字符串的方法或函数
- 使用 pair<int、int> 或字符串作为 map<> 键,哪个更有效?
- 字符串只包含有效的字符?
- 如何更有效地计算n个字符串之间的不匹配分数?
- 当字符串中只有一个"GOOD"字符串可用时,从没有空格的字符串中提取第一个单词的最佳和有效方法?
- 为什么字符串(常量字符* s,size_t pos,size_t len = npos)有效?
- 文字字符串有效,但字符串在 file.open() 中不起作用