我最近参加了几个在线课程,我仍然看到一些教师默认情况下将以下元标记添加到他们的文档顶部:
<meta http-equiv="X-UA-Compatible" content="IE=edge">
Run Code Online (Sandbox Code Playgroud)
思考似乎是这同样重要和有用<meta charset="UTF-8">.
但为什么?
根据微软的Modern.ie文档,它是"确保Internet Explorer使用最新引擎"的"最佳实践".好,可以.
但是,如果按照流程图MSDN上它清楚地表明,没有`X-UA兼容信息的文档被转发到用户的"兼容性视图"喜好,如果多数民众赞成不设置,那么只需按照!DOCTYPE声明.
换句话说,除非用户具有一些兼容性视图设置,否则IE将只关注您的!DOCTYPE并使用浏览器的最新标准模式进行渲染 ...... X-UA-Compatible IE=Edge根本不需要声明.
正如MSDN所说:" 使用HTML5文档类型声明来启用边缘模式 ".
那么在什么情况下X-UA-Compatible IE=Edge需要?
我正在使用自动化(即COM自动化)在Internet Explorer(9)中显示一些HTML:
ie = CoInternetExplorer.Create;
ie.Navigate2("about:blank");
webDocument = ie.Document;
webDocument.Write(szSourceHTML);
webDocument.Close();
ie.Visible = True;
Run Code Online (Sandbox Code Playgroud)
出现Internet Explorer,显示我的html,其开头为:
<!DOCTYPE html>
<HTML>
<HEAD>
...
Run Code Online (Sandbox Code Playgroud)
注意: html5标准模式选择加入doctype
html
除非文件不符合ie9标准模式; 它是在ie8标准模式下:

如果我先将html保存到我的电脑:

然后查看那个 html文档,将IE放入标准模式:

我的问题是如何更新我的SpawnIEWithSource(String html)功能以使浏览器进入标准模式?
void SpawnIEWithSource(String html)
{
Variant ie = CoInternetExplorer.Create();
ie.Navigate2("about:blank");
webDocument = ie.Document;
webDocument.Write(html);
webDocument.Close();
ie.Visible = true;
}
Run Code Online (Sandbox Code Playgroud)
编辑:一个更详细,更不易理解或可读的代码示例,这无助于进一步提出问题可能是:
IWebBrowser2 ie;
CoCreateInstance(CLASS_InternetExplorer, null, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IID_WebBrowser2, ie);
ie.AddRef();
ie.Navigate2("about:blank");
IHtmlDocument doc;
dispDoc = ie.Document;
dispDoc.AddRef();
dispDoc.QueryInterface(IHTMLDocument2, doc);
dispDoc.Release()
doc.Write(html);
doc.Close();
doc.Release();
ie.Visible = true;
ie.Release(); …Run Code Online (Sandbox Code Playgroud) 这让我疯了.
无论我尝试什么,Internet Explorer都会切换到IE7标准文档模式.我尝试使用HTML5 boilet plate和HTML5 reset(他们自己的站点进入Quirks模式)尝试剥离我的代码以使其无法尝试并使其表现出来.
我还添加了元标记,无论如何都应该强制IE使用它的最新版本,但是根据W3C,所做的一切都使得我的标记无效.
这就是我的意思; 我错过了什么?
<!doctype html>
<!--[if IE 7 ]> <html class="ie7> <![endif]-->
<!--[if IE 8 ]> <html class="ie8> <![endif]-->
<!--[if gt IE 8]><!--><html><!--<![endif]-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title></title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<p>Test text</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
编辑
我通过以下建议找到了解决方案.这个建议不起作用,但确实引起了我的回答.这可能不是100%适合每个人,因为它在body标签上强加了一个类而不是html,但它适用于我,似乎适用于IE.
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="stylesheet" href="css/style.css">
</head>
<!--[if IE 7 ]> <body class="ie7> <![endif]-->
<!--[if IE 8 ]> <body class="ie8> <![endif]-->
<!--[if …Run Code Online (Sandbox Code Playgroud) 当我测试我在另一台机器上创建的新的asp.net MVC应用程序时,布局不正确,在IE9中看起来很奇怪.在查看开发人员工具时,模式/标准设置为旧版本甚至兼容模式.我把它改回了IE9,又恢复了.
但是当我重新打开网站时它又重新设置了这些值,是否有一些默认值可以保持覆盖,或者是因为某些原因我的应用程序导致这些值更改为旧版本?
在IE9中,我的浏览器已设置:
F10 - >工具 - >兼容性视图设置 - >添加192.168.10.227
因此当我尝试提供文件时,浏览器模式为9 compat视图,文件模式为IE7标准.
我的问题是,如何制作文件模式IE9而不是IE7?
我试过了:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">
<meta http-equiv="X-UA-Compatible" content="IE=9" />
Run Code Online (Sandbox Code Playgroud)
但两者都不起作用.
这是我的文件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>OpsCentral™</title>
<link rel="shortcut icon" type="image/x-icon" href="/opscentral/demo/favicon.ico" />
<link rel="icon" type="image/x-icon" href="/opscentral/demo/favicon.ico" />
<link rel="stylesheet" type="text/css" href="/opscentral/demo/css/main.css" />
<link rel="stylesheet" type="text/css" href="/opscentral/demo/css/widget_list.css" />
<script type="text/javascript" src="/opscentral/demo/js/jQuery/jQuery.js"></script>
<script type="text/javascript" src="/opscentral/demo/js/jQuery/jQuery.ajaxq.js"></script>
<script type="text/javascript" src="/opscentral/demo/js/util.js"></script>
<!-- *******************************************************************
WOM - Windows on Load Manager
******************************************************************** -->
<script type="text/javascript" src="/opscentral/demo/js/wom.js"></script>
<script type="text/javascript" …Run Code Online (Sandbox Code Playgroud) 我在html5reset.org上使用优秀的HTML 5重置模板,我的X-UA兼容元标记似乎不起作用.这是我的标题的样子:
<!DOCTYPE html>
<!--[if lt IE 7 ]> <html class="ie ieNoHtml5 ie6 no-js" lang="en"> <![endif]-->
<!--[if IE 7 ]> <html class="ie ieNoHtml5 ie7 no-js" lang="en"> <![endif]-->
<!--[if IE 8 ]> <html class="ie ieNoHtml5 ie8 no-js" lang="en"> <![endif]-->
<!--[if IE 9 ]> <html class="ie ie9 no-js" lang="en"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--><html class="no-js" lang="en"><!--<![endif]-->
<!-- the "no-js" class is for Modernizr. -->
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<title>Title of Page</title>
Run Code Online (Sandbox Code Playgroud)
将显示在IE中使用兼容性视图模式的选项(URL字段中的损坏的页面图标).问题是我的一些客户已经将IE9浏览器设置为"始终使用兼容性视图"模式,结果是网站看起来像IE7,即使他们使用的是IE9,而X-UA-Compatible也可以覆盖这个.
现在,如果我删除有趣的标题:
<!DOCTYPE html>
<html …Run Code Online (Sandbox Code Playgroud) 我一直在调查一个问题,正在努力寻找新的想法,所以我想我会看到是否有人可以提供帮助.
我有一个在Chrome和Firefox中显示正常的页面.它在IE9中也很好用,但我们的一些客户必须使用兼容模式......当在兼容模式下查看页面时,由于某种原因,它会强制显示在IE7文档模式中.
该页面有!DOCTYPE HTML作为第一行,还有:
meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1
Run Code Online (Sandbox Code Playgroud)
其中,我认为应该强制页面以最新的文档模式显示.
当我在F12开发人员工具中浏览HTML时,html的第一行已被注释掉:
!-- DOCTYPE HTML --
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议我可以尝试解决此问题,即强制页面显示在IE9文档模式?当我在开发人员工具中手动将文档模式更改为IE9时,页面显示正常 - 所以我只需要找出为什么IE强制IE7文档模式而不使用默认值.
任何帮助非常感谢.