C#中window.open无法生效,注册脚本报Unexpected token <语法错误
问题原因分析
嘿,这个报错的根源其实很简单——你在使用ScriptManager.RegisterClientScriptBlock的时候犯了一个小细节错误:
这个方法的最后一个参数addScriptTags你设置成了true,这意味着方法会自动帮你生成并包裹<script>标签。但你自己又在字符串里手动写了转义后的<script>和</script>,这就导致最终输出到客户端的代码变成了嵌套的<script>标签:
<script> <script>window.open('www.abc/Print/XMLGenerate.aspx?orders=3571,6548,12365');</script> </script>
这种嵌套结构完全不符合浏览器的脚本解析规范,自然会抛出Unexpected token <的语法错误。
解决方法
有两种简单的修复方式,推荐第一种:
方式一:移除手动添加的
<script>标签,让方法自动生成
直接删掉字符串里的<script>和</script>,只保留核心的JavaScript代码即可,因为addScriptTags=true会帮你自动加上正确的标签:public void OpenNewWindow(string url) { ScriptManager.RegisterClientScriptBlock(Page, this.GetType(), "newindow", String.Format("window.open('{0}');", url), true); }这样最终生成的客户端代码就是完全合规的:
<script>window.open('www.abc/Print/XMLGenerate.aspx?orders=3571,6548,12365');</script>方式二:将
addScriptTags设为false,保留手动标签(不推荐)
如果你一定要自己写<script>标签,那就把最后一个参数改成false,同时注意不要用转义的<,直接写原始的<和>:public void OpenNewWindow(string url) { ScriptManager.RegisterClientScriptBlock(Page, this.GetType(), "newindow", String.Format("<script>window.open('{0}');</script>", url), false); }不过这种方式完全没必要,属于画蛇添足,还是第一种方法更简洁规范。
内容的提问来源于stack exchange,提问作者Mitesh Jain
相关产品推荐
相关产品推荐

