0

スクリプト タグを含むページ コンテンツを含むアプリがありますが、レンダリングしようとすると、「Uncaught SyntaxError: Unexpected token 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
4

2 に答える 2

1

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 ビューでは、jRuby コードの前に関数を使用します。

- content_for :javascript do
  - javascript_tag do
    App.initialize({ data: #{j @data.to_json.html_safe } }); 
于 2013-06-17T16:14:48.903 に答える