我在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。
答案 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);
}
...我在编译时立即看到了问题:
无法识别的转义序列
...问题序列加下划线。