document.write в StringBuilder? - PullRequest
       10

document.write в StringBuilder?

0 голосов
/ 03 сентября 2010

Я использую StringBuilder в файле Ashx для возврата JavaScript.Все работает нормально, за исключением одной строки ...

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 будет работатьКак колдовство!Если я его оставлю, он даже не запустится.Есть ли какое-то ограничение на использование оператора document.write в StringBuilder?В качестве альтернативы, есть ли лучший способ выписать Javascript из .NET?Он должен быть из .NET из-за необходимости использования серверных переменных.

1 Ответ

2 голосов
/ 03 сентября 2010

В закрывающем теге script есть нераспознанная escape-последовательность. \/ не является допустимой escape-последовательностью. Вы, вероятно, хотите:

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);
}

... и я сразу увидел проблему при компиляции:

Нераспознанная escape-последовательность

... с подчеркнутой последовательностью проблем.

...