[Rails] escap_javascript
Published in
3 min readOct 20, 2018
近日在撰寫一個 API 的過程中,需要 render *.js.erb
,並在這個 template 中混用 Ruby 和 Javascript,執行到最後會 compile 成 Javascript 傳至 browser 做處理。
結果報錯了或並未出現預期的結果!
結果是因為沒有用 escape_javascript(Javascript)
導致 Javascript 中使用的單雙引號因為沒有跳脫而造成錯誤。
例如,ga('create', 'UA-XXXXX-Y', 'auto');
時,這段 Javascript 在 *.js.erb
中最後能正常被處理。
但是在沒使用 escape_javascript(Javascript)
時,當改為 ga('create', "UA-XXXXX-Y", 'auto');
後會因為沒有跳脫而造成錯誤。
而 escape_javascript(Javascript)
到底做了什麼?
就是將回車字元( carriage return character )和單雙引號做跳脫,透過文件也清楚可以看出其實就是將下列字元做轉換,
'\\' => '\\\\'
"</" => '<\/'
"\r\n" => '\n'
"\n" => '\n'
"\r" => '\n'
'"' => '\\"'
"'" => "\\'"
轉換過後 browser 就不會因為這些字元沒做跳脫而暴錯了。
另外 escape_javascript(Javascript)
也能寫成 j(Javascript)
。
參考文件如下