Я хотел бы использовать предоставленную пользователем строку в качестве аргумента для функции JavaScript и, следовательно, должен экранировать все символы, которые могут привести к разрыву скрипта.
Это для моста Swift to JavaScript, который должен бытьиспользуется с WKWebView.evaluateJavaScript()
, который обрабатывает необработанный JavaScript.
window.someObject.method( ... user provided string ... )
Строка может содержать все, что угодно, разрывы строк, двойные кавычки, обратные метки, последовательность перехода из Юникода, подстановки и т. д.
В настоящее время я используюшаблонный литерал и escape:
- \ с \\ (одинарный обратный слеш с двойной обратной косой чертой)
- $ {с \ $ {
- `с обратной косой чертой + обратная косая черта
Я пытаюсь заставить это работать с String.raw
, но я не могу понять, как избежать замен.
Потенциальный ввод пользователя:
hello ${1+1}
Я хочу, чтобы эта точная строка была аргументом для моей функции JavaScript, без обработок.
Вот что я попробовал:
// User input is: hello ${1+1}
console.log(String.raw`hello ${1+1}`)
console.log(String.raw`hello \${1+1}`) // So close, but not quite
console.log('I want: hello ${1+1}')
Я хочу вот что:
window.someObject.method( String.raw`hello ${1+1}` ) → hello ${1+1}
Возможно ли это вообще?