Pergunta

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

Eu preciso escapar da seqüência acima, a fim de adicionar a coisa toda para um StringBuilder, mas até agora eu deve estar faltando alguma coisa, porque rescisão corda não é correto ...

Foi útil?

Solução

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

O prefixo @ faz escapar mais simples. Você apenas tem que transformar cada "para ''.

Você vai encontrar o seu programa muito mais fácil de manter, se você armazenar o JavaScript em um arquivo externo. Eu suponho que você está usando StringBuilder assim você pode misturar pedaços de roteiro constante com alguns valores dinâmicos? Você poderia escrevê-lo em um arquivo, mas colocar escapes como este para os valores dinâmicos:

var fromCSharp = {0};

Em seguida, em tempo de execução, carregar o arquivo JS e dar a string.Format como a cadeia de formato, juntamente com os valores de substituir cada ocorrência de {0}, {1}, etc. Você só precisa carregar a cadeia de formato de o arquivo de uma vez e mantê-lo em cache.

Além disso, se os valores que você está inserindo o JavaScript são eles próprios strings literais, você precisa escapar deles de acordo com a sintaxe de JavaScript.

Outras dicas

Você deve tentar algo como isto:

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

Quando prefixar um literal string com @, a única escapando necessário é dobrar o "caracter.

Espero que isso ajuda.

A cadeia no início é o que eu quero exatamente ... (não estou misturando JavaScript com C # - Eu só preciso adicionar uma cadeia para a C # StringBuilder que por Coincidance contém algumas JavaScript)

Seu um script externo que eu tenho que colocar em uma página, usando um StringBuilder (por várias razões).

Eu não tenho nenhuma maneira de saber se quaisquer alterações ao script irá fazê-lo falhar então eu tenho que incluí-lo como é ...

É apenas 1 linha do script total, mas a maioria das outras linhas Eu consegui escapar corretamente e eles são incluídos como queria ...

Eu acho que você está misturando-se o que é JavaScript eo que é C#. Pode dizer-nos a cadeia que está string que você está tentando alcançar ...

Por exemplo

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

mas presumivelmente

gDomain e gDcsId

são variáveis ??de seu método C#

talvez esta:

"<SCRIPT TYPE='text/javascript' SRC='"+"http"+"(window.location.protocol.indexOf('https:')==0?'s':'')"+"://" + gDomain + "/"+ gDcsId+ "/wtid.js"+"'></SCRIPT>")
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top