при попытке alert('I\'m testing');
возникает проблема
Обратная косая черта также является побегом в цепочках Ruby! Итак строковый литерал:
"alert('I\'m testing');"
означает строку:
alert('I'm testing');
обратная косая черта исчезла еще до того, как на нее взглянул JavaScript. Когда вы пишете строковый литерал JavaScript внутри строкового литерала Ruby, вам нужно избежать экранирования, \\
, чтобы получить реальный \
, который затем в JavaScript избежит апострофа.
escape_javascript
правильно генерирует обратную косую черту для JavaScript, если обратная косая черта была включена в его входные данные. Но опять же, если вы пишете строковый литерал, вы должны избежать обратной косой черты, чтобы получить настоящую обратную косую черту:
escape_javascript("\b") -> this is a backspace character!
escape_javascript("\\b") -> this is backslash-then-letter-b;
escaped for JavaScript literal to double-backslash-then-b.
Итак, это нормально:
"'"+escape_javascript(myvar)+"'"
альтернативно, вы можете использовать кодировщик JSON для создания строкового литерала JavaScript, включая окружающие кавычки.