[Rails] escap_javascript

Nathan Lee
Change or Die!
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)

參考文件如下

--

--