JavaScript String.raw不处理替换以获取;生的;粗线?
我想使用用户提供的字符串作为JavaScript函数的参数,因此需要转义所有可能导致脚本中断的字符 这是一个Swift到JavaScript的桥接器,用于处理原始JavaScript的JavaScript String.raw不处理替换以获取;生的;粗线?,javascript,escaping,template-literals,Javascript,Escaping,Template Literals,我想使用用户提供的字符串作为JavaScript函数的参数,因此需要转义所有可能导致脚本中断的字符 这是一个Swift到JavaScript的桥接器,用于处理原始JavaScript的WKWebView.evaluateJavaScript() window.someObject.method( ... user provided string ... ) 字符串可以包含任何内容、换行符、双引号、反勾号、unicode转义序列、替换等 目前我使用的是一个模板文本和转义: \带\\(单反斜杠和
WKWebView.evaluateJavaScript()
window.someObject.method( ... user provided string ... )
字符串可以包含任何内容、换行符、双引号、反勾号、unicode转义序列、替换等
目前我使用的是一个模板文本和转义:
- \带\\(单反斜杠和双反斜杠)
- ${with\${
- `使用反斜杠+反勾号
String.raw
一起工作,但我不知道如何逃避替换
潜在用户输入:
hello ${1+1}
我希望将该字符串作为JavaScript函数的参数,不处理替换
以下是我尝试过的:
//用户输入为:hello${1+1}
console.log(String.raw`hello${1+1}`)
console.log(String.raw`hello\${1+1}`)//非常接近,但不是很接近
log('I-want:hello${1+1}')
您可以使用:
/**
* Prepare multi-line string for inclusion in JavaScript.
*
* Note! New line characters are added because slash (\) at the end of template string would brake template syntax.
* Starting new line is added for code beauty ;-).
*
* @param {String} text Some string.
*/
prepareTemplateString(text) {
if (text.search(/[`$]/)>=0) {
text = text.replace(/([`$])/g, '\\$1');
return "String.raw`\n"+text+"\n`.replace(/\\\\([`$])/g, '\\$1')";
}
return "String.raw`\n"+text+"\n`";
}
但我对此不满意。似乎String.raw
实际上比标准模板字符串慢。我原以为String.raw会有一些优化,但它似乎只是模板字符串之上的另一层。您可以使用以下方法:
/**
* Prepare multi-line string for inclusion in JavaScript.
*
* Note! New line characters are added because slash (\) at the end of template string would brake template syntax.
* Starting new line is added for code beauty ;-).
*
* @param {String} text Some string.
*/
prepareTemplateString(text) {
if (text.search(/[`$]/)>=0) {
text = text.replace(/([`$])/g, '\\$1');
return "String.raw`\n"+text+"\n`.replace(/\\\\([`$])/g, '\\$1')";
}
return "String.raw`\n"+text+"\n`";
}
但我对此并不满意。似乎
String.raw
实际上比标准模板字符串慢。我原以为String.raw会有一些优化,但它似乎只是模板字符串之上的另一层。用户的字符串是如何到达Javascript的?它是直接写入HTML中的Javascript吗现在还没有?不,字符串实际上是一个由Swift API生成的JSON字符串。然后我动态生成一个JavaScript片段,并通过调用webView.evaluateJavaScript()
将其注入页面,以便对JavaScript进行分析和计算。好吧,根本不要使用String.raw
。只需使用JavaScript对字符串进行编码(类似于JSON编码字符串值)用户的字符串是如何到达Javascript的?它目前是否直接写入HTML中的Javascript?不,该字符串实际上是由Swift API生成的JSON字符串。然后我动态生成一个Javascript片段,并通过调用webView.evaluateJavaScript()将其注入页面
因此JavaScript被解析和评估。好吧,根本不要使用String.raw
。只需JavaScript编码字符串(类似于JSON编码字符串值)