旧服务器上正常运行的JavaScript代码,在新服务器上无法运行

3
这件事让我很烦恼。我正在尝试将一些旧应用程序迁移到新服务器,但是在代码中到处都有document.all,导致出现了很多问题。
在你说之前,我知道不要使用document.all。它确实存在,并且我无能为力...这个特定的问题涉及到嵌入在程序集中的JavaScript,而我没有源代码,并且没有重新开发的权限。
我的主要困惑是,当我在同一浏览器中测试当前版本的应用程序时,它可以工作。这只是一个直接复制和粘贴的工作,迁移期间没有更改任何代码,但是当我在新服务器上运行应用程序时,document.all(element)总是返回null。
IIS或更新的.NET框架是否以某种方式不同地处理客户端脚本?
我来自托管在Windows Server 2005上的.NET 2.0,然后转移到托管在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"/>来关闭编码,但是我无法在这个项目中添加新类。


它被设置为 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > - McFixit
@Digitalfront 我的页面已经包含了 <xhtmlConformance mode="Legacy"/> 标签,并且没有验证控件存在。 - McFixit
底线是浏览器正在使用的HTML/JS - 使用差异工具比较旧服务器和新服务器生成的浏览器视图源代码。可能HTML略有不同,或者浏览器运行在不同的模式下。 - Jim W says reinstate Monica
此外,一个可能的服务器端助手是这个:http://www.hanselman.com/blog/IE10AndIE11AndWindows81AndDoPostBack.aspx - Jim W says reinstate Monica
@JimW 经过仔细检查,发现 HTML 有些微不同,正在更新我的问题。 - McFixit
显示剩余2条评论
2个回答

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版本相同,并暂时解决了我的问题。


0

听起来你的项目即将结束,而你只是想给它注入新的生命。我认为document.all在IE11已经不再使用了,是吗?所以时间正在流逝。

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


我同意。虽然我想出了一些临时解决方案的想法,但那真的不是我喜欢做事情的方式。尽管 document.all 并不是根本问题,但随着我们的用户采用 IE 10 和 11,应用程序再次崩溃只是时间问题。我将尝试编写一个脚本来解码实体并向那些能够做出决策的人提供一些选项,谢谢。 - McFixit
很高兴能帮忙 - 如果您能接受我的答案,我就能再养活我的家人一个月 - 谢谢。 - Jim W says reinstate Monica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接