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

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

4

4 に答える 4

7

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

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

文字列リテラルの前に @ を付ける場合、必要なエスケープは " 文字を 2 倍にすることだけです。

この助けを願っています。

于 2008-12-04T10:31:04.863 に答える
4
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 の構文に従ってエスケープする必要があります。

于 2008-12-04T10:32:35.360 に答える
0

JavaScriptと を混同していると思いますC#。達成しようとしている文字列を教えてください...

例えば

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

しかし、おそらく

gDomaingDcsId

C#メソッドの変数です

たぶんこれ:

"<SCRIPT TYPE='text/javascript' SRC='"+"http"+"(window.location.protocol.indexOf('https:')==0?'s':'')"+"://" + gDomain + "/"+ gDcsId+ "/wtid.js"+"'></SCRIPT>")
于 2008-12-04T10:22:53.400 に答える
0

最初の文字列はまさに私が欲しいものです... (私は JavaScript と C# を混同していません - 偶然にも JavaScript が含まれている C# StringBuilder に文字列を追加する必要があるだけです)

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

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

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

于 2008-12-04T10:28:13.903 に答える