簡體   English   中英

帶有腳本標簽的Rails / Backbone.js內容顯示錯誤“未捕獲的SyntaxError:意外令牌非法”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM