0

我在 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。

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 回答