客户端<script>标记</script>中服务器端经典ASP代码的问题

时间:2013-12-02 19:36:18

标签: javascript vbscript asp-classic

我正在对页面进行故障排除(在经典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>标记。他们似乎在其他任何地方都可以。

我以前从来没有见过这个。有人可以告诉我为什么这会导致问题吗?

1 个答案:

答案 0 :(得分:0)

当您说页面未正确呈现时,您是指在设计视图中的Visual Studio内部吗?是否仍然使用普通的ASP经典解释器通过IIS正确运行?如果是这样的话,我会把它归结为Visual Studio的语法高亮/错误检查与解释器本身不同,并且复杂的边缘情况可能会在Visual Studio中引发误报错误。我已经看到过去使用现代版本的Visual Studio发生的事情,并且总是发现只要页面通过IIS正常工作,就可以在Visual Studio中安全地忽略它们。

我可以看到潜在问题的原始代码的唯一部分是,如果Session("editHelp")包含',则会破坏JavaScript代码。如果该字符串尚未在代码中的其他位置进行清理,那么执行Replace(Session("editHelp"), "'", "\'")或类似操作可能会更安全。

除此之外我无法看到它的问题,但是“从查询中消除它”可以说,你可以用合适的虚拟静态内容替换所有ASP块并以这种方式运行,看看是否你的渲染问题仍然存在。如果它仍在那里,你可以安全地消除这一点。如果它消失了,还需要进行更多调查吗?