怎么修改服务器兼容模式,如何从服务器端强制设置IE的兼容模式?
在域控制的环境中,我发现在某些客户端(winXP / Win7,IE8 / IE9)上触发兼容模式,即使我们提供X-UA标签,!DOCTYPE定义和“IE = Edge”响应头。这些客户端勾选了“在兼容性视图中显示Intranet站点”复选框。这正是我试图覆盖的内容。
以下是我用来尝试了解IE如何实际触发兼容模式的文档。
网站所有者始终控制其内容。网站所有者可以选择使用X-UA-Compatible标签来绝对声明他们希望他们的网站如何显示以及将标准模式页面映射到IE7标准。使用X-UA-Compatible标记会覆盖客户端上的兼容性视图。
谷歌的“定义文档兼容性”,遗憾的是SPAM引擎不允许我发布超过2个网址。
这是一个ASP .NET Web应用程序,在主页面上包含以下定义:
和web.config
我已经使用Fiddler来检查标头是否确实被正确注入。
我的理解是,通过这些设置,我应该能够覆盖“在兼容性视图中显示Intranet站点”浏览器设置。但根据客户端的不同,我发现其中一些仍会触发兼容模式。它似乎也取决于机器级别而不是策略组设置,因为即使我在不同客户端上使用相同的凭据集,我也会获得不同的结果。
禁用兼容性视图设置复选框可以解决问题。但实际目的是确保无论客户端设置如何,应用程序都以完全相同的方式呈现。
任何想法和我可能会错过的东西?是否有可能强制IE始终渲染页面而不触发Compat模式?
太感谢了,
乌梅
PS:该网站目前正在开发中,当然不在微软的兼容性列表中,但我也检查过以防万一。
谷歌“了解兼容性视图列表”,遗憾的是SPAM引擎不允许我发布超过2个网址。
答案
我发现这两种常见方法存在问题:
在web.config中使用自定义标头()执行此操作允许对同一应用程序的不同部署进行不同的设置。我认为这是一个可能出错的事情,所以我认为如果应用程序在代码中指定它会更好。还有,IIS6 doesn't support this。
在Web窗体母版页或MVC布局页面中包含HTML 标记似乎比上面更好。但是,如果某些页面不从这些页面继承,则需要复制标记,因此存在潜在的可维护性和可靠性问题。
只需将X-UA-Compatible标头发送到Internet Explorer客户端,即可减少网络流量。
结构良好的应用程序
如果您的应用程序的结构导致所有页面最终都从单个根页继承,请包含标记,如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容器应该可以管理它。
Advantages
克服本答案开头列出的问题。
Disadvantages
网站管理员无法控制标头值。如果出现新版本的Internet Explorer并对网站呈现产生负面影响,则可能会出现问题。但是,这可以通过让模块从应用程序的配置文件中读取标头值而不是使用硬编码值来克服。
这可能需要修改才能使用ASP.NET MVC。
这不适用于静态HTML页面。
上面代码中的PreSendRequestHeaders事件似乎没有在IIS6中触发。我还没弄清楚如何解决这个bug。
另一答案
将我的标题更改为以下解决问题:
另一答案
编辑:今天我们能够用以下内容覆盖兼容性视图:
另一答案
对于Node / Express开发人员,您可以使用中间件并通过服务器进行设置。
app.use(function(req, res, next) {
res.setHeader('X-UA-Compatible', 'IE=edge');
next();
});
怎么修改服务器兼容模式,如何从服务器端强制设置IE的兼容模式?相关推荐
- w7怎么修改服务器dns,Win7本地连接的ip设置方法 Win7如何设置DNS服务器?
Win7系统中默认情况下使用的是动态IP,开机后自动获取IP地址.有些情况下我们需要使用固定IP地址和DNS服务器,那么如何把IP地址设置为固定的呢?下面就来介绍一下Win7如何进行本地连接的ip和D ...
- 安卓修改服务器数据库,安卓端使用服务器端数据库
安卓端使用服务器端数据库 内容精选 换一换 用户通过psycopy2连接GaussDB(for openGauss)服务器时,可以通过开启SSL加密客户端和服务器之间的通讯.在使用SSL时,默认用户已 ...
- 王者荣耀如何修改服务器信息,王者荣耀定位怎么更改设置 修改定位方法推荐...
王者荣耀定位是决定我们的荣耀战区的,所以有些玩家小伙伴还是比较看重的!那么现在小编要给你们推荐带来的就是王者荣耀定位怎么更改设置的攻略,小伙伴们想知道那就一起来看一下吧! 最近火热版本:王者荣耀云游戏 ...
- wegame怎么修改服务器点,Wegame手机畅玩怎么设置 Wegame手机畅玩设置教程
近日Wegame开启了全新的功能手机畅玩,玩家可以通过这个功能在自己的手机上玩腾讯的热门网络游戏LOL,CF,DNF等,但是大部分玩家朋友都不知道Wegame这个新功能手机畅玩怎么设置,看完Wegam ...
- word2003如何设置护眼模式_连锁企业如何设置「单店盈利模式」?
文| Leo 文图 |来自网络 编辑 | 逸马集团会员中心 全文字数2540字,阅读时间5分钟30分 <万利连锁>:单店盈利到复制盈利,复制盈利到模式裂变.模式裂变到平台运营,平台运营到品 ...
- 无线网卡设置为监听模式 airodump破解wifi
linux下将无线网卡工作模式切换为监听模式 首先使用如下操作设置为监听模式: #ifconfig wlan0 down //没有错误提示就是成功 #iwconfig wlan0 mode moni ...
- Baumer工业相机堡盟工业相机如何通过BGAPISDK设置多帧采集模式(C#)
Baumer工业相机堡盟工业相机如何通过BGAPISDK设置多帧采集模式(C#) Baumer工业相机 Baumer工业相机BGAPISDK和多帧采集模式的技术背景 Baumer工业相机通过BGAPI ...
- 饥荒怎样修改服务器模式,饥荒服务器模式改不了 | 手游网游页游攻略大全
发布时间:2017-04-12 饥荒熔炉模式怎么玩 饥荒熔炉模式怎么玩 饥荒熔炉模式经验心得分享.下面一起来看看吧. 首先是选人阶段.建议6人. 因为服务器并不怎么好,所以--请保持良好心态. 建议选 ...
- linux修改服务器时间_操作系统基础解析:Windows和Linux 到底有何不同?
出品丨自主可控新鲜事 内容节选自东方证券 正文共2520字,建议阅读时间8分钟 计算机操作系统是基础软件,分为闭源和开源两类. 广义的操作系统包括:计算机(PC.工作站.服务器)系统.移动端系统(例如 ...
最新文章
- CRF(条件随机场)与Viterbi(维特比)算法原理详解
- 访问SAP C4C Business Configuration工作中心时遇到的错误信息
- [react] 写出React动态改变class切换组件样式
- XidianOJ 1123 K=1 Problem of Orz Pandas
- 30 CO配置-控制-产品成本控制-成本对象控制-期末结算-定义更新
- 人员梯度培养_人员管理 | 生产班组员工队伍管理及制度建立
- Java大对象lob_JavaEE JDBC 读写LOB大对象
- python中input和raw_input的区别
- ajax 详解(GET,POST方式传输以其封装)
- Python使用matplotlib可视化模拟班级学生分数柱状图和折线图
- 开端-从c语言入门到不放弃
- 生成模型应用——使用变分自编码器(VAE)控制人脸属性生成人脸图片
- 静态代理和动态代理的区别,什么场景使用?
- 外贸术语(FOB,CIF,CFR,FCA,CPT,CIP,EXW、FAS、DAF、DES、DEQ、DDU、DDP)
- 在KVM虚拟化云主机上使用WXPE的研究
- android6自定义锁屏,Android自定义控件系列之:锁屏页
- GitHub上最火的两份Java面试小册,Star已经超百万
- Linux下文件(文件夹)的压缩和解压
- 人人农场 renren 外挂 Java 实现
- 如何利用HTML5快速开发一款小游戏
热门文章
- 火影忍者android转ios,火影忍者手游iOS及安卓更新内容拆包教程
- javascript +
- Android-Framework学习笔记(九)—— Broadcast的注册、发送和接收过程
- 主题302:安装和开发
- 计算机专业毕业实习重要吗?计算机专业实习方向
- 韩泰机器人_韩国人花了近100亿,就为了造个科幻片中的机器人
- 南京邮电大学数据结构实验三(图的基本运算及飞机换乘次数最少问题)
- 从keystore中导出私钥key
- STM32控制ULN2003驱动步进电机28BYJ-48
- c语言程序中的错误可分为,C语言程序常见错误与调试方法(1)