![](/img/trans.png)
[英]Rails4 update.js.erb get content has error “Uncaught SyntaxError: Invalid or unexpected token”
[英]Rails/Backbone.js content with script tag shows error “Uncaught SyntaxError: Unexpected token ILLEGAL”
我有一個應用程序,該應用程序的頁面內容包含腳本標簽,但是當它嘗試呈現時,會出現錯誤“未捕獲的SyntaxError:意外的令牌ILLEGAL”。
我正在初始化一個主干應用程序,如下所示:
- content_for :javascript do
- javascript_tag do
App.initialize({ data: #{@data.to_json.html_safe } });
生成以下JSON:
<script type="text/javascript">
//<![CDATA[
App.initialize({ data: {"content":"<div style=\"padding-left:5px;\"><script type=\"text/javascript\" src=\"http://www.opentable.com/frontdoor/default.aspx?rid=52900&restref=52900&bgcolor=8AA86B&titlecolor=0F0F0F&subtitlecolor=0F0F0F&btnbgimage=http://www.opentable.com/frontdoor/img/ot_btn_black.png&otlink=FFFFFF&icon=light&mode=short&hover=1\"></script></div>"});
//]]>
</script>
我試圖將其渲染如下(使用hamlc):
- if @page.attributes.content
.text.page-content~ @page.attributes.content
在Thoughtbot.com的Chad的幫助下,我被指向以下博客文章。 顯然,這是帶有JSON轉義的“缺陷”。 http://jfire.io/blog/2012/04/30/how-to-securely-bootstrap-json-in-a-rails-view/
首先覆蓋json函數。
config/initializers/json_escape.rb
class ActionView::Base
def json_escape(s)
result = s.to_s.gsub('/', '\/')
s.html_safe? ? result.html_safe : result
end
alias j json_escape
end
(重新啟動服務器)
在您的rails視圖中,在Ruby代碼之前使用j
函數:
- content_for :javascript do
- javascript_tag do
App.initialize({ data: #{j @data.to_json.html_safe } });
使用給定的JSON代碼段,服務器端將生成以下JavaScript tah內容來引導應用程序:
App.initialize({ data: "content":"<div>...</div>" });
無效的JavaScript。 您需要在對象本身的內部包裝data
鍵,例如:
App.initialize({ data: { "content":"<div>...</div>" }});
因此,您應該以以下服務器端Haml結尾:
- content_for :javascript do
- javascript_tag do
App.initialize({ data: { #{@data.to_json.html_safe } } });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.