JavaScript代码在旧服务器上运行,但不在新服务器上运行

时间:2014-02-20 21:40:54

标签: javascript asp.net iis

这让我发疯了。我正在尝试将一些遗留应用程序迁移到新服务器,并且我遇到了很多问题,document.all遍及整个代码。

在你说之前,我知道。不要使用document.all。它就在那里,我无能为力......这个特殊的问题在程序集中有JavaScript,我没有源代码,我没有重新开发的权限。

我的主要困惑是,当我在与迁移版本相同的浏览器中进行测试时,当前版本的应用程序正在运行。这是一个直接的复制和粘贴作业,在迁移过程中没有代码发生变化,但是当我在新服务器document.all(element)上运行应用程序时,总是返回null。

IIS或更新的.NET框架是否以某种方式以不同方式处理客户端脚本?

我来自使用IIS 6在Windows Server 2005上托管的.NET 2.0,以及使用IIS 8在Windows Server 2012上托管的.NET 4.0。

我正在寻找任何想法,为什么在同一个浏览器中进行测试时这些行为会有所不同

更新: document.all定位的用户控件正在编码,这会破坏控件的ID,即'elementId'输出'elementId'

程序集中的代码使用的是Attributes.Add,它包含单引号。我发现有一些消息来源暗示了一个新类,例如:

public class HtmlAttributeEncodingNot : System.Web.Util.HttpEncoder
{
    protected override void HtmlAttributeEncode(string value, System.IO.TextWriter output)
    {
        output.Write(value);
    }
}

正在添加,这将允许在web.config中使用<httpRuntime encoderType="HtmlAttributeEncodingNot"/>关闭编码,但我无法向此项目添加新类

2 个答案:

答案 0 :(得分:1)

我将保留已接受的答案,但是如果其他人在将来遇到此问题,请添加此答案。

我的情况发生了变化,我能够为项目添加一个类。我的问题中的课程:

public class HtmlAttributeEncodingNot : System.Web.Util.HttpEncoder
{
    protected override void HtmlAttributeEncode(string value, System.IO.TextWriter output)
    {
        output.Write(value);
    }
}

以及在web.config中使用类进行编码: <httpRuntime encoderType="HtmlAttributeEncodingNot"/>

足以处理Attributes.Add中编码为$#39;的单引号

此外,使用旧JavaScript需要注意的是.net呈现控件的ClientID。使用上述代码的组合,以及<xhtmlConformance mode="Legacy"/>clientIDMode="AutoID",我能够将html渲染为相同的2.0等同于暂时解决我的问题。

答案 1 :(得分:0)

听起来你的项目正在结束它的生命,你只想为它注入新的生命。我认为document.all是从IE11开始的,不是吗 - 所以时钟正在滴答作响。

我建议写一些Javascript来迭代DOM并查找任何编码的ID - 然后将它们更改回.NET 2表单。在页面底部运行该JS(而不是onload),希望在你“更正”id之前没有任何东西会尝试访问document.all。