質問

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

全体を StringBuilder に追加するには、上記の文字列をエスケープする必要がありますが、文字列の終了が正しくないため、これまでのところ何かが欠けているはずです...

役に立ちましたか?

解決

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

@ プレフィックスを使用するとエスケープが簡単になります。それぞれの「」を「」に変えるだけです。

JavaScript を外部ファイルに保存すると、プログラムの保守がはるかに簡単になります。StringBuilder を使用しているので、定数スクリプトの一部といくつかの動的な値を組み合わせることができると思いますか?ファイルに記述することもできますが、動的な値には次のようにエスケープを入れます。

var fromCSharp = {0};

次に、実行時に JS ファイルをロードし、それをフォーマット文字列として string.Format に渡します。また、{0}、{1} などの各出現箇所を置き換える値も指定します。ファイルからフォーマット文字列を 1 回ロードしてキャッシュしておくだけで済みます。

また、JavaScript に挿入する値自体が文字列リテラルである場合は、JavaScript の構文に従って値をエスケープする必要があります。

他のヒント

次のようなものを試してください:

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

文字列リテラルの前に@を付ける場合、エスケープする必要があるのは<!> quotを2倍にすることだけです。キャラクター。

このヘルプをお待ちしています。

最初の文字列は正確に欲しいものです...(JavaScriptをC#と混同していません-C#StringBuilderに文字列を追加する必要があります。

(さまざまな理由で)StringBuilderを使用して、ページに配置する必要がある外部スクリプトです。

スクリプトの変更が失敗するかどうかを知る方法がないので、そのまま含める必要があります...

これはスクリプト全体の1行のみですが、他のほとんどの行は正しくエスケープできており、必要に応じて含まれています...

JavaScriptとは何かを混同していると思います。あなたが達成しようとしている文字列である文字列を教えてください...

たとえば

C#window.location.protocol.indexOf('https:')

です

ただし、おそらく

gDomainおよびgDcsId

<=>メソッドの変数

多分これ:

"<SCRIPT TYPE='text/javascript' SRC='"+"http"+"(window.location.protocol.indexOf('https:')==0?'s':'')"+"://" + gDomain + "/"+ gDcsId+ "/wtid.js"+"'></SCRIPT>")
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top