0

ashxファイルでStringBuilderを使用してjavascriptを返しています。1行を除いて、すべて正常に動作します...

javascript.Append("document.write(\"<script id=__ie_onload defer \" + \"src=javascript:void(0)><\/script>\");");

読みやすくするために、エスケープされていないバージョンは次のとおりです。

document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");

この行をコメントアウトすると、私のashxファイルは魅力のように機能します。でも、そのままにしておくと走りません。StringBuilderでのdocument.writeステートメントの使用に何らかの制限はありますか?あるいは、.NET内からJavascriptを書き出すためのより良い方法はありますか?サーバー変数を使用する必要があるため、.NETからのものである必要があります。

4

1 に答える 1

2

script終了タグに認識されないエスケープシーケンスがあります。\/は有効なエスケープシーケンスではありません。あなたはおそらく欲しい:

javascript.Append("document.write(\"<script id=__ie_onload defer \" + \"src=javascript:void(0)></script>\");");

または、本当にそのシーケンスが必要な場合は\/、二重にエスケープし\ます。

javascript.Append("document.write(\"<script id=__ie_onload defer \" + \"src=javascript:void(0)><\\/script>\");");

デバッグのヒントとして、ツールからフィードバックが不十分でコンパイルエラーが表示されない場合は、問題のあるコードを含むテストアプリケーションを作成してみてください。コードをコンソールアプリケーションにコピーしました。次のようになります。

static void Main(string[] args)
{
    var javascript = new StringBuilder();
    javascript.Append(...
    Console.Write(javascript);
}

...そして私はコンパイル時にすぐに問題を見ました:

認識されないエスケープシーケンス

...問題のシーケンスに下線が引かれています。

于 2010-09-03T02:12:31.057 に答える