Tengo una variable ruby que tiene un fragmento de código html almacenado, por ejemplo:

<html>
 <head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"></head>
 <body style="margin: 0; border: 0; padding: 0; font-family:'Times New Roman'">
  <div style="text-align:center">
    <div style="font-size:24px; font-family:'Times New Roman'">Jorge</div>
    <div style="font-size:15px; font-family:'Times New Roman'">Constanza</div>
  </div>
  </body>
</html>

Entonces, tengo una variable en ruby llamada html que tiene eso almacenado ... (realmente tiene \ n \ r al final de las líneas) y necesito pasar esta variable ruby a una var javascript. Entonces en mi template.html.erb tengo lo siguiente:

<%= javascript_tag do %>
  var previewHtml = "<%=html%>";
<% end %>

Pero esto no funciona, ya que lo siguiente se representa en mi archivo html:

var previewHtml = "<html>
 <head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"></head>
 <body style="margin: 0; border: 0; padding: 0; font-family:'Times New Roman'">
  <div style="text-align:center">
    <div style="font-size:24px; font-family:'Times New Roman'">First Name</div>
    <div style="font-size:15px; font-family:'Times New Roman'">Last Name</div>
  </div>
  </body>
</html>";

Y recibo en Firefox el siguiente error: SyntaxError: unterminated string literal var previewHtml = "<html>. Eso tiene sentido ... y no tengo ni idea de enviar este fragmento de HTML a js. Necesito que luego se inserte en un iFrame.

Ya he intentado hacer lo siguiente:

<%= javascript_tag do %>
  var previewHtml = "<%= @feed_template.html_template.gsub(/\r?\n/, '').html_safe %>";
<% end %>

Y se representa lo siguiente:

var previewHtml = "<html>  <head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"></head>  <body style="margin: 0; border: 0; padding: 0; font-family:'Times New Roman'"> <div style="text-align:center"> <div style="font-size:24px; font-family:'Times New Roman'">Jorge</div> <div style="font-size:15px; font-family:'Times New Roman'">Constanza</div> </div> </body> </html>";

Y obtengo un SyntaxError: missing ; before statement ...

¿Alguna ayuda?

1
Juan Garcia 3 sep. 2014 a las 00:56

2 respuestas

La mejor respuesta

Puedes usar el escape_javascript ayudante, que también tiene el alias de j:

<%= javascript_tag do %>
  var previewHtml = "<%= escape_javascript html %>";
<% end %>

O más corta:

<%= javascript_tag do %>
  var previewHtml = "<%= j html %>";
<% end %>

Esto reemplaza todos los caracteres Javascript especiales con sus secuencias de escape coincidentes, especialmente las citas, que parecen causarle más problemas.

El resultado procesado debería verse así: (¡Tenga en cuenta las barras invertidas!)

var previewHtml = "<html>\n<head><meta http-equiv=\"Content-Type\"  ... "
0
Daniel Rikowski 2 sep. 2014 a las 21:19

Yo no he usado Ruby ... y no sé cómo funciona, pero supongo que tiene una función para codificar json. Por lo tanto, puede guardar su html en una variable clave-valor y json_encode.

En php, imprimo variables php en javascript usando json_encode, así

echo "window.json_data['" . $key . "'] = " . json_encode( $value ) . "\n"; 

Donde el valor puede ser su cadena html.

0
Rainer Plumer 2 sep. 2014 a las 21:11