May 2013 Blog Posts

Chrome卡死无响应的问题解决方法

MitchellChu 2013-05-31 其他技术 网络锁事

Flash Logo  前天[5月28日]开始Windows7 X64下的最新版[27.0.1453.94 m]突然频频出现,新标签页打开之后半天没有反应;或者显示白板;再或者一直显示尝试连接到XXX的提示,一直处于加载状态,但是直接访问View-Source的时候,却能非常快的加载起来。开始只当是系统的暂时性发作,也没有理会,但连续两天都出现这种问题,就让我非常的郁闷,每次都需要右键标签页,然后复制,借此看是否能够顺利加载起来。今天要查询资料稍微多些,多次使用Chrome后,终于忍无可忍,毅然决然的下定决心要看看怎么回事,要是抽风也不带抽两天的不是?

  首先可以明确知晓的是这两天对Chrome并没有做任何修改操作,但知道系统有Chrome的自动更新程序,所以想看看Chrome这两天是否做过更新,于是第一个Idea出来了——找找Chrome的日志,看看Chrome这两天做过什么。找了一圈却没有找到Chrome的日志文件,上Google这么牛逼的网站上搜了一圈(抱怨下:Google被G·F·W墙的好厉害啊!!!),好像也并没有有价值的信息。一条路就这样被堵上了。

  一计不成咱再来一计,Google上搜不到,我本地能搜吧?于是非常简单的在系统盘搜索了一下修改日期在28号之后的文件,发现好多好多文件啊,亲!这样一个个文件扫过去倒是相当好的消磨时间的方法。那换换方法吧,因为Chrome下安装的扩展程序太多,担心是这个问题,先把所有Chrome下的所有的扩展程序禁用了,但是问题依旧,依旧的那么卡,还是经常的死在那里。于是想想,还有插件没有禁用,好吧,chrome://plugins进入到Chrome的插件下面,都给它禁用了。——回来一看,嘿,还真好了,看来还真是插件的问题!!!

  终于把问题缩小范围,接下来去看看这两天有哪个插件动过了。回到本地搜吧:

  非常庆幸,就一个——!在前天早上11点多动过。

  问题确认是,那么把其他插件全部恢复看看是不是这个问题了。恢复之后,所有一切都正常,因此,肯定就是FlashPlayer无疑了。怎么FlashPalyer会有问题呢? ——这个就不太清楚了,但是在Windows下有个金牌的处理方式:重装!

  在Chrome下转到:http://get.adobe.com/cn/flashplayer/ 获取最新的FlashPlayer,网站会自动识别当前浏览器,并会提供对应的FlashPlayer版本,选择立即下载即可。特别提醒:建议使用Chrome访问,其他的浏览器访问之后,可能得到的版本不同。如下图IE和Chrome的比较:

不同浏览器获取的FlashPlayer版本不同

  获取新版本的FlashPlayer安装之后,Chrome的卡死问题消失,不过在Chrome的任务管理器中查看,突然发现Chrome的GPU占用的内存500M往上,好大啊。嗯恩,回归正题,再次到chrome://plugins下查看的时候发现已经有两个FlashPlayer插件了,一个是开始禁用的,一个是后来安装的,看了下版本,果然不一样啊,原来,导致了Chrome抽风。

Chrome下的Adobe Flash Player版本错误导致Chrome卡死

问题解决了,也收录下Chrome下面查看各种功能配置的地址,以便下次需要DEBUG的时候用的,地址是:chrome://chrome-urls,在Chrome地址栏输入之后,能看到如下的界面:

Chrome-Urls展示Chrome所有可用的配置项

强制IE浏览器或WebBrowser控件使用指定版本显示网页

MitchellChu 2013-05-30 其他技术 HTML&HTML5 网络锁事

Windows8 下面IE10的LOGO  自从装了IE10之后,就发现好些个网站显示都不是那么的正常,网站上有些功能竟然还会出现一些意想不到的BUG——本来就是针对IE开发的,现在下竟然用不起来了,让用户情何以堪?但是就为少量用户使用的系统去大动干戈的调整功能,这实在是让人头疼!在经过一番折腾之后,竟然找到一个非常M$的方法来解决 —— 强制高版本的IE浏览器用低地版本模式显示网页。

  就是直接让IE10默认以指定的IE版本的浏览器模式来运行,并用这个指定的版本来进行解析页面,在上一篇定义文档兼容性的文章中,我们已经其实知道了浏览器模式文档模式的区别,并且我们通过修改X-UA-Compatible来修改了浏览器的文档模式。这个方法本来能够解决我们当下的问题,但实际上,我们不想让整个网站用IE8或者IE7来解析,我们仅是想针对少数的几个人在核心的功能上使用IE8来处理。当然,我们还是能够使用页面上添加meta元素的 —— 但在这里,我们寻求到另外的一个解决方案:由于使用核心功能的人群可控,并且数量少。因此直接控制IE,让高版本的浏览器(版本>=8)按照指定的低版本模式进行解析。方法是直接调整注册表项:

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION

或者

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION

这个注册表项下添加一个DWORD的值,名称为:iexplore.exe值为十进制的8888或者8000。保存后,重新打开IE浏览器(IE8或更高),你就会发现,浏览器此时使用的是IE8模式在进行浏览。

  这个方法本来是用在解决那些使用了的应用程序在需要特定的浏览器版本支持下的。既然如此,那么让我们更进一步的了解下,在我们的程序中如果使用了IE WebBrowser之后,应该如何指定浏览器版本。其实,如果有心,你可以打开上面两个注册表项的任意一个,说不定就能看到上面已经有一些值了,这些都是已经指定特定浏览器版本的程序。 比如我这里就有下面这些:

在注册表为程序指定IE浏览器版本

devenv.exe是VS2010的应用程序,在这里我们可以看到,M$强制要求devenv.exe中使用的浏览器版本为IE9。既然他都这么用,自然而然,我们也应该能从中找到解决问题的方法了。如果你在应用程序:SomeApplication.exe中使用了IE WebBrowser的控件,那么你如果想在SomeApplication.exe这个程序中的WebBrowser控件以某一个指定的版本的浏览器进行解析页面,你就可以在上述的那个注册表项中加入你的程序了。比如你要指定为IE8运行,那么你只要新建一个DWORD值,名称为SomeApplication.exe,值为:8888即可。

  到此我们已经会为浏览器和WebBrowser控件指定特定的浏览器运行版本了,但可能你会发现,后面的数值有那么一些不好理解,那我要使用IE怎么办?同样IE8怎么会有8000和8888这样的数值呢,个表示什么?如果你也有疑问,那么请看下表吧,罗列出了常用的数值对照说明表:

 

说明
10001 (0x2711) Internet Explorer 10。网页以IE 10的标准模式展现,页面!DOCTYPE无效
10000 (0x02710) Internet Explorer 10。在IE 10标准模式中按照网页上!DOCTYPE指令来显示网页。Internet Explorer 10 默认值。
9999 (0x270F) Windows Internet Explorer 9. 强制IE9显示,忽略!DOCTYPE指令
9000 (0x2328) Internet Explorer 9. Internet Explorer 9默认值,在IE9标准模式中按照网页上!DOCTYPE指令来显示网页。
8888 (0x22B8) Internet Explorer 8,强制IE8标准模式显示,忽略!DOCTYPE指令
8000 (0x1F40) Internet Explorer 8默认设置,在IE8标准模式中按照网页上!DOCTYPE指令展示网页
7000 (0x1B58) 使用WebBrowser Control控件的应用程序所使用的默认值,在IE7标准模式中按照网页上!DOCTYPE指令来展示网页。
FEATURE_BROWSER_EMULATION设置说明

注:

1. 准模式指的是浏览器模式,而!DOCTYPE控制的是文档模式。

2. 应用程序中包含的WebBrowser Control控件时,默认WebBrowser使用的是IE7,这是个很重要的知识点。

好了,到此应该对于IE运行于指定版本的方法已经介绍完毕,同时自己程序中如何设置的方法也有了明确方向,接下来的事情就是——用起来吧。

 

参考文档:Internet Feature Controls (B..C)

定义文档兼容性,让IE按指定的版本解析我们的页面

MitchellChu 2013-05-29 其他技术 HTML&HTML5

   作为开发人员,特别是作为Web的前端开发人员i'm so tired for iexplorer x ,最悲催的莫过于要不断的,不断的去调试各种浏览器的显示效果,而这其中最让人头痛的莫过于MS下的IE系列浏览器,在IE系列中的调试我们将会发现没有一个是好伺候的,于是不得不学习各种Hack技术来满足各种之间的兼容。在这种痛苦中不断的挣扎,MS可能也实在是看不下去了,于是在IE8开始,微软引入了文档兼容性,而这,终于可以让前端的开发人员稍微能够喘口气。

  文档兼容性是对 Microsoft Internet Explorer 6 中引入的兼容性模式的扩展,使您可以选择 Internet Explorer 用于显示网页的特定呈现模式。——微软的官方文档。

  在这里先介绍两个概念:浏览器模式(browser mode)和文档模式(document mode)。这两个模式的引入,让我们在IE浏览器上能够简单的处理兼容性问题,当然,其实也并不简单,先看看这两个概念的定义:

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

  默认情况下,IE8的浏览器模式为IE8。用户可以通过单击地址栏旁边的兼容性视图按钮来手动切换到不同的浏览器模式。在IE8中,IE8兼容性视图会以IE7文档模式来显示网页,同时会向服务器发送IE7的用户代理字符串。

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

  简而言之:浏览器模式的改变,能够改变请求中User Agent的值,让服务器获取后,能够按照UA的值进行对应处理(如果服务器上有这个处理功能)。而文档模式的改变只反映在本地的浏览器解析HTML上,对客户端显示会有影响,而对服务器透明。同时,修改浏览器模式会影响文档模式,反之却不成立。

  使用比较容易,就是在我们要反馈给客户端的HTML代码中的head中添加一个meta元素,用来描述当前的文档需要使用何种浏览器版本来解释当前文档,代码类似下面这样:

<html>
<head>
  <!-- Mimic Internet Explorer 7 -->
  <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" >
  <title>测试模拟IE7浏览模式</title>
</head>
<body>
  <!--这里是你网站的内容-->
</body>
</html> 

在使用中,大小写不敏感,如果你需要客户端模拟其他的浏览器版本来解析文档你可以设置为对应的版本即可,通常的设置有如下几种:

 

X-UA-Compatible值 说明
IE=5 让浏览器使用Quirks mode来显示,实际上是使用Internet Explorer 7 的 Quirks 模式来显示内容,这个模式和IE5非常相似。
IE=edge 这个设置是让IE使用当前的最高版本进行文档的解析,官方文档指明,edge模式仅适用在测试环境,不建议在生产环境中使用
IE=7 使用标准IE7来处理
IE=EmulateIE7 模拟IE7来处理,遵循 <!DOCTYPE> 指令,如果文档有当前有一个合法的<!DOCTYPE>,就使用IE7模式,否者使用Quirks模式(Internet Explorer 5 Quirks),对于大部分网站来说,这是首选的兼容性模式
IE=8 标准IE8
IE=EmulateIE8 模拟IE8,遵循 <!DOCTYPE> 指令,参照IE=EmulateIE7说明
IE=9 标准IE9
IE=EmulateIE9 模拟IE9,遵循 <!DOCTYPE> 指令,参照IE=EmulateIE7说明
chrome=1 强制使用Chrome,需要IE下Chrome插件支持
IE=EmulateIE10 模拟IE10
IE=10 标准IE10,遵循 <!DOCTYPE> 指令,参照IE=EmulateIE7说明
文档兼容性设置 X-UA-compatible

当然,除了这之外,你还可以设置其他值,甚至可以是7.5这样的数值(个人不建议),IE解释的时候,会尝试将数值转为最接近的版本。chrome这个是使用Chrome插件来处理当前的文档内容,你也可以在HTML中插入下面的代码,以便在用户没有安装Chrome插件的时候,提醒用户:

<script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1/CFInstall.min.js"></script>
<!--在需要使用的地方进行Chrome Check-->
<script>CFInstall.check();</script>

这样在用户访问的时候,如果发现没有安装Chrome插件,就会提示安装Chrome插件。

 到这里,我们基本上已经知道怎么使用X-UA-Compatible标头了,让我们更进一步!

其实,X-UA-Compatible不仅可以用meta元素放在页面内,也可以在服务器上进行配置,比如在IIS上配置默认的Header,或者在使用.NET中配置web.config文件,让服务器端配置上默认的标头,这样系统就有默认的标头来指定全局的文档模式。因为单个页面的文档模式设置会覆盖默认的文档模式,因此,在某个需要特殊的文档模式展示的页面可以在进行单独配置meta元素即可。

在IIS7中的配置X-UA-Compatible标头如下:

config X-UA-Compatible on IIS

Apache下面配置X-UA-Compatible响应标头的方法:点击这里下载MS官方文档[PDF]

在web.config中的配置如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <clear />
        <add name="X-UA-Compatible" value="IE=EmulateIE7" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration> 

 这里的配置和前面配置meta元素不同,这里配置的HTTP响应标头是在客户端请求服务端之后,在服务端的响应标头中出现的(Response Header)。因此在页面中是没有meta元素的,我们可以在响应标头里面看到这个信息。

请求的响应标头中的X-UA-Compatible

到这里,我们已经知道了如何在IIS上或者在.NET程序中配置全局性的X-UA-Compatible标头了,我们也了解了在页面的meta元素中添加X-UA-Compatible,可以说,我们已经了解了X-UA-Compatible的所有用法,在实际中我们完全可以根据自己的情况,选择一种或多种方式来满足我们的项目需求。然而,事实上,我们在使用的过程将会发现似乎不是那么的顺利,我们将会发现IE是不是会处于Quirks mode(怪癖模式)下,这是怎么了?恩,问题千奇百怪,然总归是我们了解不精罢。但我们深受其困的时候,我们就可能还需要再进一步——了解IE到底是如何处理这个标头的!

对于IE的处理方法其实也并不难理解,一张图就能清晰的描述出IE对于X-UA-Compatible的处理方式:

IE处理X-UA-Compatible的流程

从这张图片中我们就能够非常清晰了解到IE处理X-UA-Compatible的方式,知道原理之后,我们碰到关于X-UA-Compatible的问题处理起来也就知道如何进行了。剩下的时间,让我们休息一下吧,好好享受M$给我们带来的这片刻的宁静。。。

 

使用Netcraft查看指定网站的一些技术信息

MitchellChu 2013-05-29 其他技术 网络锁事

NETCRAFT Logo  公司于1994年底在英国成立,多年来一直致力于互联网市场以及在线安全方面的咨询服务,其中在国际上最具影响力的当属其针对网站服务器,域名解析/主机提供商,以及SSL市场所做的客观严谨的分析研究。——来自百度百科。当然这个不是今天要介绍的,今天要介绍的是Netcraft下面的一些功能。这些功能为我们查询指定域名的网站的一些信息,于了解一个还是非常有帮助的。比如:OS及历史变更,网站使用技术,安全信息,IP地址,DNS等一系列信息。当然,如果你愿意,还可以监控这个网站的performance。

  查询网站的一些基本信息的使用的方式也非常的简单。进入Netcraft官网,找到What's that site running?在搜索框中输入你需要查找的域名,网站将返回所有关于该域名下的域名信息列表(含服务器信息),如果你想了解指定域名下的详细信息,只需要在Site Report那栏点击即可了解非常详细的信息。下面是查找信息的操作图教程:

1. 找到进入What's that site running页面的入口,下图左侧的Internet Exploration 选项下有入口——其他几个是神码?try it!

running position

2. 你也可以直接访问:http://uptime.netcraft.com/up/graph,进入后的页面大概是下面这个样子。

 What's that site running

3. 把你要查找的域名填入框框内,Search一下,就能出类似下面的结果

netcraft search yahoo information

非常的明显,OS显示的是使用的系统,IP address是IP地址了。当然,如果你需要关于更详细的信息,也是可以的。

4. 在页面头部有个Report字样,你点击进去,就能获取关于该域名的更详细的资料,以及历史变更和网站页面使用的技术,详细信息的页面如下:

netcraft view yahoo china detail information

怎么样,非常的详细吧,DNS,IP,域名注册商什么的,一清二楚。当然,如果你想对站点本身有些了解,它还提供Site Technology,查看网站使用的前台技术似乎也不是那么难。

当然,这只是皮毛,还有更多的功能等着去发现,你可以试试。

Ubuntu 12.04.2 LTS x64在文本模式下无法正常登陆

MitchellChu 2013-05-28 其他技术 Unix & Linux

  今天安装的 12.04.2 LTS x64,在图形界面下非常正常的能进行登陆登出操作,但是在切换到下,却完全无法进行正常的登录操作,经过再三确认,用户名,密码均正确的很,就是一直登录不了,提示

   在进行过尝试和Google之后,发现可能的问题是:使用了小键盘! —— 不能使用小键盘?Ok,认了,于是再次到文本模式下测试,按理说,这个问题应该解决了,但结果令人非常的让人崩溃,还是不了!难道还有其他问题,应该没有了啊,我安装选择的是美式键盘,即使小键盘无法识别,那其他键应该是认的啊。

  在文本模式下测试了小键盘,的确会有问题,主要表现为:

1. 在刚切换到小键盘的时候,可能会出现小键盘无法识别的情况;

2. 文本模式下如果没有识别小键盘的状态下,不断的按Num Lock键,我们会发现键盘上的Num Lock灯会错乱几下(偶尔),而后如果切换到Num Lock On 的状态下,是能够正常输入数字的。

3. 接上面第2点,如果处于Num Lock Off的状态下,会发现小键盘其实编程了光标键,这个时候可以将光标移动到***login:这个提示符之前,也可以是上一行,当然,移动不要紧,回来就是,但如果移动之后,将会发现其实你即使再切回Num Lock On的状态,输入用户名之后,你也没有办法登陆的 —— 整个界面现在处于文本编辑状态?!

  本人是Linux文盲,对于这个还真是非常好奇,之后还多测试了一下,连Caps Lock也试过,发现也会错乱,当然,这些和解决问题都没有任何关系!问题终归还是要解决的,因此非常努力的思考方法。

  黄天总是不会辜负有心人啊,在经过不知道多少个脑细胞之后,脑残的将登陆用户名小写,尝试登录 ——成功!竟然成功了,难道Linux系不是大小写敏感的吗?后来经过搜寻,遭到网上一位朋友的一句话,大意是:Unix和Linux下的用户名都必须是小写的。但我觉得这个欠妥当,后面在这里看到好像用户名都是小写的,这个让我疑惑的是,我安装的时候是大写的,而且系统显示的也是大写的用户名。怎么登陆就会是要小写的呢?

  系统虽然能够登陆了,但为什么我填写的是大写,最后还是小写,但系统又显示大写的这个问题却困扰着我,作为菜鸟的我,暂时还没有办法了解到这个问题的根源,只好暂时搁置了。

MySQL中GRANT权限的时候特殊字符转义

MitchellChu 2013-05-21 其他技术
在MySQL中使用了下划线的数据库名,今天在GRANT的时候,死活无法为用户赋予权限,一直报错。查看了官方的文档,文档中说:如果使用下划线的数据库在使用GRANT的时候,需要对数据库的下划线进行转义。但是该如何转义呢?转义方法和MS SQL比起来还真是千差万别啊!

MySQL中CREATE DATABASE和CREATE SCHEMA区别

MitchellChu 2013-05-21 其他技术
一般创建数据库我们都习惯于使用CREATE DATABASE 来完成,但是在MySQL中,官方的文档在 CREATE DATABASE 语法一节中写了一句:也可以使用CREATE SCHEMA。那么CREATE SCHEMA和CREATE DATABASE有什么不同吗?

开始程序菜单中的项无法正常显示的处理方式

MitchellChu 2013-05-15 其他技术 万象漫谈
在Windows 7中,由于对开始菜单中的应用程序文件夹进行了重新的归类,从而导致了系统抽风,现象有两个。一是原本应该显示的系统文件夹项消失的无影无踪,但是打开应用程序的所在的目录查看,这些程序项的文件夹却存在于根目录下。二是在控制面板中,点击管理工具,根本无法进入管理工具界面,而是报系统引用错误。 本文针对这个问题进行了初步的探讨,并给出了当下问题的解决方案。

关于博主

  一枚成分复杂的网络IT分子,属于互联网行业分类中的杂牌军。