ie如何设置允许java_如何从服务器端强制设置IE的兼容模式?

我发现这两种常见方法存在问题:

在web.config中使用自定义标头( )执行此操作允许同一应用程序的不同部署以不同方式设置此设置 . 我认为这是一个可能出错的事情,所以我认为如果应用程序在代码中指定它会更好 . 另外,IIS6 doesn't support this .

在Web窗体母版页或MVC布局页面中包含HTML 标记似乎比上述更好 . 但是,如果某些页面存在潜在的可维护性和可靠性问题 .

仅通过向Internet Explorer客户端发送 X-UA-Compatible 标头可以减少网络流量 .

结构良好的应用程序

如果您的应用程序的结构导致所有页面最终都从单个根页继承,请包含 标记,如the other answers所示 .

旧版应用程序

否则,我认为最好的方法是自动将HTTP标头添加到所有HTML响应中 . One way to do this正在使用 IHttpModule :

public class IeCompatibilityModeDisabler : IHttpModule

{

public void Init(HttpApplication context)

{

context.PreSendRequestHeaders += (sender, e) => DisableCompatibilityModeIfApplicable();

}

private void DisableCompatibilityModeIfApplicable()

{

if (IsIe && IsPage)

DisableCompatibilityMode();

}

private void DisableCompatibilityMode()

{

var response = Context.Response;

response.AddHeader("X-UA-Compatible", "IE=edge");

}

private bool IsIe { get { return Context.Request.Browser.IsBrowser("IE"); } }

private bool IsPage { get { return Context.Handler is Page; } }

private HttpContext Context { get { return HttpContext.Current; } }

public void Dispose() { }

}

IE=edge 表示IE应该使用其最新的渲染引擎(而不是兼容模式)来呈现页面 .

public class Global : HttpApplication

{

private static IeCompatibilityModeDisabler module;

void Application_Start(object sender, EventArgs e)

{

module = new IeCompatibilityModeDisabler();

}

public override void Init()

{

base.Init();

module.Init(this);

}

}

请注意,重要的是模块是 static 并且未在 Init 中实例化,因此每个应用程序只有一个实例 . 当然,在实际应用程序中,IoC容器应该可以管理它 .

优点

克服本答案开头概述的问题 .

缺点

网站管理员不要使用硬编码值来配置文件 .

这可能需要修改才能使用ASP.NET MVC .

这不适用于静态HTML页面 .

上面代码中的 PreSendRequestHeaders 事件还没有弄清楚如何解决这个bug .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值