这是前两天解决的一个故障,准确的说它不是一个SharePoint的问题,而是IE8浏览器或者说是HTML代码的问题,但我感觉还是挺有意思的,所以贴上来分享一下。

基础知识

简单的讲,就是IE浏览器中有两个模式设定,一个是“浏览器模式”(Browsers Mode),一个是“文档模式”(Document Mode)。

浏览器模式”用于切换IE针对该网页的默认文档模式、对不同版本浏览器的条件备注解析、发送给网站服务器的用户代理(User-Agent)字符串的值。网站可以根据浏览器返回的不同用户代理字符串判断浏览器的版本和安装的功能,这样就可以向不同的浏览器返回不同的页面内容。

文档模式”用于指定IE的页面排版引擎(Trident)以哪个版本的方式来解析并渲染网页代码。切换文档模式会导致网页被刷新,但不会更改用户代理字符串中的版本号,也不会从服务器重新下载网页。切换浏览器模式的同时,浏览器也会自动切换到相应的文档模式。

一般来讲,用户可以通过F12工具自行调整这两种模式。但通常来讲,开发人员会通过在HTML代码里写入下面这行<meta>标签来直接指定最适合该页面的模式以防止出现不必要的异常, 比如js错误.

<meta http-equiv="X-UA-Compatible" content="IE=8"/>

故障描述

这次的故障是我们的站点虽然都统一通过<meta>指定了文档模式为IE8 Standards, 但在有些页面却不起作用, 文档模式变成了IE7Standards, 于是这些页面报出了JavaScript Error.

JS Error的原因我顺便提一句, 是因为我们的js代码中用了JSON.parse()语句,这句话在IE7Standards中却不能识别。一个临时的解决方法是把这句话用jQuery.parseJSON替换,但显然这等于是用了更旧的方法,不是个好主意。最好的解决方法还是找到为什么<meta>不起作用了。

经过排查源代码,发现了共性。

凡是出问题的页面,<meta http-equiv="X-UA-Compatible" content="IE=8"/>这句话都不是紧随<title>标签之后的第一句话,前面被莫名其妙插入了很多javascript引用。

而相反的, 在没有问题的页面里,<meta http-equiv="X-UA-Compatible" content="IE=8"/>都是紧随在<title>标签后的。

解决方法

然后经过搜索发现了这篇帖子http://stackoverflow.com/questions/13519696/mvc-app-causing-ie9-to-use-older-standards/13524518#13524518 里面提到<meta http-equiv="X-UA-Compatible" content="IE=8"/>必须紧随<title>才可以生效。那么换句话说,你只有想办法把<meta>之前的那些引用去掉才可以。在我环境中,那些引用是因为一个新安装的插件导致的,卸载掉之后这个问题就解决了。

但很可能在你的SharePoint里这个问题不能这样解决的话,还有一个方法也可以起到作用,那就是在SharePoint的web.config里面来指定文档模式和浏览器模式,这样等于有了双保险,万一页面上的<meta>不起作用,web.config就会起作用。做法如下图:

<meta>指定浏览器模式(browser mode)或文档模式(document mode)无效的更多相关文章

  1. 网站文档模式总是以Quirks文档模式解析网站

    <meta name="renderer" content="webkit"/> <meta http-equiv="X-UA-Co ...

  2. 浏览器默认解析文档模式IE7

    背景:实习期间开发了一套页面,兼容到IE8+,可是在给产品体验时,他的QQ浏览器默认解析到了文档模式IE7,出现了页面的兼容性问题.问题排查:QQ浏览器目前有两个模式,极速模式和兼容模式,其中极速模式 ...

  3. IE的文档模式, 及Textarea呈现bug一例

    做了个非常简单的页面, 仅有几行html代码, 内容如下: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtm ...

  4. DOCTYPE是什么鬼?文档模式又是什么鬼?

    !DOCTYPE !DOCTYPE是什么: 在所有 HTML 文档中规定 DOCTYPE 是非常重要的,这样浏览器就能了解预期的文档类型, 告诉浏览器要通过哪一种规范(文档类型定义 DTD)解析文档( ...

  5. 全栈JavaScript之路( 二十二 )IE 专有扩展——文档模式

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/hatmore/article/details/37611911 ie8 引入了一个新的概念.&quo ...

  6. 通过<meta>标签指定IE的文档模式实现CSS3兼容

    今天发现之前做好的一个页面在IE中打开显示的效果不正常,本地和服务器上显示的是两种不同的样式. 经过确认文档内容和CSS都是一样的. 通过IE F12(开发人员工具)发现不正常的样式 浏览器文档模式自 ...

  7. <JavaScript>“浏览器模式”和“文档模式”之间的区别

    只有IE浏览器中才会有“浏览器模式”和“文档模式”,兼容性视图涉及两个重要的功能便是“浏览器模式[browser mode]”和“文档模式[document mode]”,在IE8/IE9中按F12键 ...

  8. 【IE】浏览器模式与文档模式 及其开发中处理方式

    原文:http://blog.csdn.net/neo_liu0000/article/details/7589731 什么是浏览器模式和文本模式? 经常使用IE开发者工具的同学,肯定见过浏览器模式和 ...

  9. 设置IE浏览器文档模式版本

    浏览器版本问题是所有开发web的程序员共同的诟病,尤其是IE浏览器,笔者上次修改公司的一个项目中出现项目是在IE9没有出来之前,而现在修改时,则发现页面上出现的表格的错乱(因为表格是通过js动态生成的 ...

随机推荐

  1. webstrom配置sass与less

    1.less 安装一个稳定版的node.[例如node-v4.4.4-x64] 然后直接在webstrom里导入那个lessc.cmd 2.sass 安装ruby. 安装完之后点开,Start那个安装 ...

  2. jquery-创建弹出框原理

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. python 3.5.2 install pillow

    1. 首先尝试从官网下载, pip install pillow, 结果网络不行,总是连不上或者下载中就失败, C:\Windows\system32>pip install pillowCol ...

  4. ios推送-B/S架构-socket

    B/S架构项目,某一用户登录后执行了某些动作需要向在手机登录的对应的用户推送消息 通过socket实现 1.socket服务器:使用C#的window服务(该服务监听两个端口:比如平台8889,手机8 ...

  5. 【XLL 框架库函数】 TempInt/TempInt12

    创建一个包含了 integer 的 XLOPER/XLOPER12 原型 LPXLOPER TempInt(short int i); LPXLOPER12 TempInt12(int i); 参数 ...

  6. HTML中图像代替提交按钮

    1. 用图像代替提交按钮 当只有一个提交按钮的时候 ,可以简单的实现,不用添加事件函数,代码是: <input type = "image"' name = ".. ...

  7. (转)ShardedJedisPool的使用

    package com.test; import java.util.ArrayList; import java.util.List; import redis.clients.jedis.Jedi ...

  8. PHP获取当前位置

    如果想动态的获取当前栏目所处的位置,就要关联到数据库,下面是例子: 栏目表(category): 涉及到二级目录. (1)首先在你的首页导航栏,还有首页所出现的链接后面,为栏目加上catid,就像这样 ...

  9. php 二维数组按某字段排序

    思路很重要,最好的方法是查询时按这个字段给你排好,把问题丢给数据库,比如  order by age ,如果遇到中文时需要这样写(mysql) 如:select * from category ord ...

  10. 卸载 ibus 使Ubuntu16.04任务栏与启动器消失 问题解决

    经查证是unity误卸载了,我使用了命令: sudo apt-get remove --purge ibus 解决方法是: 使用以下命令:重置compiz: dconf reset -f /org/c ...