8

私のレイアウトでは

<% @current_user.popups.each do |p| %>
  <% content_for :script do %>
    <%= "$(document).ready ( function() { $.jGrowl(\"#{p.message}\", { sticky: true }) });" %>
  <% end %>
<% end %>

そして、スクリプトセクションで私は持っています

<%= yield :script %>

問題は、これによりエスケープされた引用符がレンダリングされ\&quot;、javascriptがこれを好まないことです。

どうすればこれを防ぐことができますか?または、これに対する別のアプローチはありますか?メッセージにHTMLを含めたいので、一重引用符を使用できません。助けていただければ幸いです。

4

2 に答える 2

11

Rails 3を使用していますか?Rails 3では、htmlのエスケープはデフォルトで行われ、次のように毎回バイパスする必要があります。jdlは上記の正しい考えを持っていましたが、まだ問題があるようです。

<% content_for :script do %>
  $(document).ready ( function() { $.jGrowl("<%= raw(p.message) %>", { sticky: true }) });
<% end %>

しかし、さらに良いのは、レールによって提供されるヘルパーを介してそれを実行することです:escape_javascriptしたがって、キャリッジリターンと見積もりをエスケープします

このような:

$(document).ready ( function() { $.jGrowl("<%= raw(escape_javascript(p.message)) %>", { sticky: true }) });
于 2010-05-17T23:03:25.523 に答える
1

ビューの文字列に.html_safeを追加してみてください。

<%= "$(document).ready ( function() { $.jGrowl(\"#{p.message.html_safe}\", { sticky: true }) });" %>
于 2014-04-02T20:50:42.690 に答える