我在 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。
最佳答案
您的结束 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);
}
...我在编译时立即看到了问题:
Unrecognized escape sequence
...问题序列下划线。
关于javascript - StringBuilder 中的 document.write ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3632618/