StringBuilder中的document.write?

时间:2010-09-03 02:05:55

标签: javascript dynamic ashx document.write

我在ashx文件中使用StringBuilder来返回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文件就像一个魅力!但是,如果我保留它,它甚至都不会运行。在StringBuilder中使用document.write语句是否有某种限制?或者,是否有更好的方法从.NET中编写Javascript?由于需要使用服务器变量,它必须来自.NET。

1 个答案:

答案 0 :(得分: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);
}

...我在编译时立即看到了问题:

  

无法识别的转义序列

...问题序列加下划线。