我正在对页面进行故障排除(在经典ASP中),偶然发现<head>
标签中的以下代码(注意#1:我使用VS2012作为我的编辑器;注意#2:I 不写这段代码):
<script type="text/javascript">
var EditHelp = '<%=Session("editHelp")%>';
<%If Request.Form.Count Then%>
window.opener.location.replace(window.opener.location);
<%End If%>
</script>
VS告诉我<script>
标记不喜欢任何服务器端<% %>
代码(它告诉我,“语法错误”),并且页面无法正确呈现。在<script>
标签之外的其他地方似乎没问题。 VS似乎无法识别<% %>
标记中的<script>
标记。他们似乎在其他任何地方都可以。
我以前从来没有见过这个。有人可以告诉我为什么这会导致问题吗?
答案 0 :(得分:0)
当您说页面未正确呈现时,您是指在设计视图中的Visual Studio内部吗?是否仍然使用普通的ASP经典解释器通过IIS正确运行?如果是这样的话,我会把它归结为Visual Studio的语法高亮/错误检查与解释器本身不同,并且复杂的边缘情况可能会在Visual Studio中引发误报错误。我已经看到过去使用现代版本的Visual Studio发生的事情,并且总是发现只要页面通过IIS正常工作,就可以在Visual Studio中安全地忽略它们。
我可以看到潜在问题的原始代码的唯一部分是,如果Session("editHelp")
包含'
,则会破坏JavaScript代码。如果该字符串尚未在代码中的其他位置进行清理,那么执行Replace(Session("editHelp"), "'", "\'")
或类似操作可能会更安全。
除此之外我无法看到它的问题,但是“从查询中消除它”可以说,你可以用合适的虚拟静态内容替换所有ASP块并以这种方式运行,看看是否你的渲染问题仍然存在。如果它仍在那里,你可以安全地消除这一点。如果它消失了,还需要进行更多调查吗?