代码之家  ›  专栏  ›  技术社区  ›  Thom Smith

使用ASP Classic中的vbscript重定向响应输出

  •  3
  • Thom Smith  · 技术社区  · 15 年前

    在纯.asp文件中,任何 <% %> 标签直接发送到输出缓冲区。此外,表达式 <%= %> 标记被计算并发送到输出缓冲区。

    我想重定向它,以便在我建立的某些上下文中,将这两个构造的结果发送到我控制的缓冲区。如果可能的话,我希望能够动态地这样做,以便在运行时将输出重定向到不同的缓冲区。

    这个问题是开放性的,主要是因为我将计划围绕这个解决方案构建什么。我可以使用任何现有的方法来捕获这个输出。性能和易用性不是主要考虑因素。

    这是一部续集 this question 我尝试了一个可能的解决方案,但结果却不起作用。

    4 回复  |  直到 15 年前
        1
  •  1
  •   Thomas    15 年前

    实际上,您正在尝试重写asp.dll isapi筛选器。如果您真的想这样做,您可以尝试在asp.dll周围编写一个包装dll,它重写 WriteClient 功能。这不会是直接的,并且回避了你试图完成什么的问题。

    一个更简单的解决方案是避免使用 <% %> 总之,用代码组装整个页面(或大部分页面),这样您的页面就只剩下:

    <html>
    <%=OutputHtml()%>
    </html>
    

    这样,您就可以完全控制输出的内容和时间。

        2
  •  1
  •   Thom Smith    15 年前

    这不是一个真正的解决方案,但这是我能想到的最好的方法:

        <% sub foo %>
                <h1>Hello, World!</h1>
        <% end sub %>
    

    然后,如果需要,可以在需要时将Sub的内容写入响应。可以使用getref操作Sub。这将污染带有subs的全局命名空间;它们甚至不能是方法,因为getref不能与它们一起工作。(The 第一次 我测试过这个,我不小心踩到了一个已有的函数上。)

    我想要 真正地 如果可能的话,我想改进一下。如有任何反馈,我将不胜感激。

        3
  •  1
  •   Mike    15 年前

    我不认为你能在ASP中做到这一点。您可以尝试创建一个ISAPI过滤器,它将监视您放入其中的某些占位符的响应,并对这些占位符之间的数据执行不同的操作。
    我不确定你的最终目标是什么,所以我不知道这是否适合你。

        4
  •  -1
  •   ulluoink    15 年前

    对于<%=%>这样的事情,您可以编写自己的函数:

    function [=](val)
        response.write val
        ' do anything you want with val
    end function
    

    另一件事我想是不可能的。但是您可以对每个要重定向的输出使用<%=%>构造…