【发布时间】:2014-02-20 21:40:54
【问题描述】:
这让我发疯了。我正在尝试将一些旧版应用程序迁移到新服务器,我遇到了很多问题,document.all 在整个代码中都出现了。
在你说之前,我知道。不要使用document.all。它就在那里,我对此无能为力...这个特殊的问题是程序集中的 JavaScript,我没有源代码,也没有重新开发的权限。
我的主要困惑是,当我在与迁移版本相同的浏览器中进行测试时,当前版本的应用程序正在运行。这是一个直接的复制和粘贴作业,在迁移过程中没有更改任何代码,但是当我在新服务器上运行应用程序时 document.all(element) 总是返回 null。
IIS 或更新的 .NET 框架是否以不同的方式处理客户端脚本?
我来自在 Windows Server 2005 上使用 IIS 6 托管的 .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"/> 来关闭编码,但我无法向该项目添加新类
【问题讨论】:
-
检查您如何在页面顶部声明
DOCTYPE -
设置为
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > -
@Digitalfront 我的页面已经包含
<xhtmlConformance mode="Legacy"/>标记并且没有验证控件存在 -
底线是浏览器正在使用的 HTML/JS - 使用 diff 工具比较新旧服务器生成的浏览器视图源。 HTML 可能略有不同,或者浏览器运行在不同的模式下。
标签: javascript asp.net iis