Pregunta

<document.write("<SCR"+"IPT TYPE='text/javascript' SRC='"+"http"+(window.location.protocol.indexOf('https:')==0?'s':'')+"://"+gDomain+"/"+gDcsId+"/wtid.js"+"'><\/SCR"+"IPT>");

Necesito escapar de la cadena de arriba para agregar todo a un StringBuilder, pero hasta ahora me falta algo porque la terminación de la cadena no es correcta ...

¿Fue útil?

Solución

string x = @"<document.write(""<SCR""+""IPT TYPE=""'text/javascript' SRC='""+""http""+(window.location.protocol.indexOf('https:')==0?'s':'')+""://""+gDomain+""/""+gDcsId+""/wtid.js""+""'><\/SCR""+""IPT>"");";

El prefijo @ simplifica el escape. Solo tienes que girar cada " en " " ;.

Encontrará su programa mucho más fácil de mantener si almacena JavaScript en un archivo externo. ¿Supongo que está usando StringBuilder para que pueda mezclar bits de script constante con algunos valores dinámicos? Puede escribirlo en un archivo pero poner escapes como este para los valores dinámicos:

var fromCSharp = {0};

Luego, en tiempo de ejecución, cargue el archivo JS y dele a string.Format como la cadena de formato, junto con los valores para reemplazar cada aparición de {0}, {1}, etc. Solo necesita cargar la cadena de formato desde el archivo una vez y manténgalo en caché.

Además, si los valores que está insertando en JavaScript son literales de cadena, deberá escapar de ellos de acuerdo con la sintaxis de JavaScript.

Otros consejos

Deberías probar algo como esto:

@"<document.write(""<SCR""+""IPT TYPE='text/javascript' SRC='""+""http""+(window.location.protocol.indexOf('https:')==0?'s':'')+""://""+gDomain+""/""+gDcsId+""/wtid.js""+""'><\/SCR""+""IPT>"");"

Al prefijar un literal de cadena con @, el único escape necesario es duplicar el " caracter.

Espero esta ayuda.

La cadena al principio es lo que quiero exactamente ... (no estoy mezclando JavaScript con C #, solo necesito agregar una cadena en C # StringBuilder que por coincidencia contiene algo de JavaScript)

Es un script externo que tengo que poner en una página, usando un StringBuilder (por varias razones).

No tengo forma de saber si algún cambio en el script hará que falle, así que tengo que incluirlo como está ...

Es solo 1 línea del guión total, pero la mayoría de las otras líneas que he logrado escapar correctamente y se incluyen como se desea ...

Creo que está mezclando lo que es JavaScript y lo que es C # . ¿Puede decirnos la cadena que está tratando de lograr ...

por ejemplo

window.location.protocol.indexOf ('https:') es JavaScript

pero presumiblemente

gDomain y gDcsId

son variables de su método C #

tal vez esto:

"<SCRIPT TYPE='text/javascript' SRC='"+"http"+"(window.location.protocol.indexOf('https:')==0?'s':'')"+"://" + gDomain + "/"+ gDcsId+ "/wtid.js"+"'></SCRIPT>")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top