3月 202011
 

html5的一个特性就是websocket,以为是多么神奇的东西,弄了个测试例子,发现在协议层上是超简单的。
首先,已类似http协议的方式建立连接。
然后,一个连接可以多次收发消息;消息的格式基本为\0x00开始 \0xff结束

和原来的http请求的区别:
1. 原来的http请求至少在应用层面一次tcp的连接只能完成一个交互
2. 由于websocket一次连接可以交互多次,所以省去了很多http头的信息

测试代码: http://code.google.com/p/phpwebsocket/

参考资料:
http://dev.w3.org/html5/websockets/
http://www.zendstudio.net/archives/websocket-protocol/

协议流实例如下:(红色为请求,蓝色为响应)

 Posted by at 上午 6:46
1月 212011
 

有这么一段代码:

 
  1. <input type="text" id="name" />
  2. <input type="text" id="password" />
  3. <script>
  4.     var $ = function (id) { return document.getElementById(id);};
  5.     $("name").focus();
  6.     $("name").blur();
  7.     $("name").onfocus = function () {alert(‘haha’);}
  8. </script>

如果运行在FF下面,像我们期望的那样,在页面载入后,不会立即alert的,但是,在IE7中,页面载入后立即就是一个alert。 显然onfocus事件的绑定被提前做了,不知道为什么。
可恶的IE7!!!

 Posted by at 上午 8:23
11月 152010
 

曾经在同事的IE6上遇到过IE会保存session的情况,就是说,虽然使用的是session,但是重新启动浏览器后该session还是存在的,不知道是什么原因。

现在我使用的是win7下的IE8,也出现了这个问题,我想这不应该是IE的bug;于是,重置IE的所有设置,问题解决,至于是哪项设置影响到的,还需要进一步调查。

怎么?不知道怎么重置?

Internet选项 =》 高级 =》 重置

 

顺便说一下: 重置之后,我的httpwatch在IE中就找不见了,只好重装了一次

 Posted by at 下午 9:05
4月 252010
 

原来对浏览器兼容性的理解主要是:

1. 要对浏览器兼容性做判断
2. 不是所有浏览器都支持的东西尽量不要用

今天看了QQ空间的一点代码,有所启发:
1. 要善于利用浏览器的一些特性;比如,现在的主流浏览器是IE和FF,IE中有很多功能是FF中所没有的,如果用js来实现这些功能可能是很大一段的js;按照原来的想法就是不去使用IE的那个功能,统一使用js来实现,这样自然没有兼容性问题。但是今天的想法却是: 在IE中就是用IE提供的功能,只有在FF中才通过js来实现; 这样做的好处就是,对于大部分的用户不需要下载那一大段的js了,对用户和服务器都是有好处的。有些功能是FF中有的,IE中没有,我们也可以这么来做。

2. 下面给出一段QQ空间的代码:http://b.cnc.qzone.qq.com/proxy.html

<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><SCRIPT>
document.domain = "qq.com";var b=false;
if (window.execScript)try{execScript("b=Asc(‘啊’)=-20319","vbscript");
}catch(e){status = "系统vbscript引擎可能已经被损坏或者反注册。尝试运行 regsvr32 vbscript.dll 命令有可能解决此问题";
}
if(!b){
document.write("<script language=’javascript’ src=’http://imgcache.qq.com/qzone/client/js/gbk.js’><\/script>");
}else{
document.write("<script language=’vbscript’ src=’http://imgcache.qq.com/qzone/proxy.vbs’><\/script>");
String.prototype.GBEncode=function(){return URLEncoding(this)}
}
</SCRIPT><script src="http://imgcache.qq.com/qzone/proxy.js"></SCRIPT><script>
if (typeof proxyLoaded=="undefined"){
document.createElement("SCRIPT").src="http://imgcache.qq.com/qzone/proxy.js?"+Math.random();
alert("proxy脚本无法正常下载,可能与您当地的网络状况有关系。\n请您关闭浏览器,重新打开空间进行尝试。");
}
</script>
</head></html>

 Posted by at 上午 2:48
11月 172009
 

一些wap服务总是根据用户的浏览器类型来判断是否跳转到适合用户访问的页面,比如只有在手机上才能访问到wap页面; 但是我确实想用Firefox访问,这样更方便一些,于是就有了修改Firefox的useragent的需求,修改办法有二:
一、安装插件:
User Agent Switcher
二、通过about:config  修改,添加 general.useragent.override , 值就是你要使用的useragent


 Posted by at 上午 12:52
9月 212009
 

写了一个脚本,内容为:
<script>
location.replace("");
</script>

该脚本在Firefox下死循环了,在IE下定向到网站的根目录了。
说明Firefox认为空就是自己,IE认为空就是根。

用302跳转试试,写脚本如下:
<?php
head("Location: ");
?>

Firefox下和没有该Location头一样,没有循环也没有跳转;
IE下还是跳转到网站的根目录了。

 Posted by at 上午 2:21
9月 092009
 

最近遇到一些用户不能访问https,下面记录一下不能访问https的几种情况:

1. 用户的电脑的时间不在证书有效期内

   a. 用户将电脑时间调到了证书生效时间以前,或证书确实还没有生效

   b. 用户将电脑时间调到了证书失效时间以后,或证书确实已经失效

2. 用户的浏览器不支持https,或没有开启https的相关选项;由于ssl2存在安全问题,所以浏览器一般默认启用ssl3 tls,而不启用ssl2
3. 浏览器存在bug,发现IE 8.0.6001.18702 如果不启用ssl2,访问https就有问题

 Posted by at 上午 5:47
8月 302009
 

kmeleon.js及pref.js配置解释

K-MeleonCCF ME目录下的defaults\pref\kmeleon.js保存了K-Meleon的默认设置.(kmeleon1.1*以前的官方版 defaults\pref下的所有.js文件也都是保存的默认设置,相当于根据用途,把kmeleon.js分散成几个文件)

K-MeleonCCF ME\Profiles\????????.default\prefs.js(老版本是K-Meleon ME\Profiles\Profiles\prefs.js)是个人设置, 保存你对浏览器设置上的修改, 它优先于kmeleon.js. 个人建议当设置好后,把大部分prefs.js里的设置转移到kmeleon.js,这样不会因为删除个人目录而丢失设置.
prefs.js里面的值要写成 user_pref  开头的形式

如果prefs.js有和kmeleon.js相同的设置项目且其值相同时, prefs.js里的项目会在运行后自动删除.

根据我的经验, 解释一下部分设置的意思.
Quote:

    pref("general.useragent.vendor", "K-Meleon");    默认UserAgent为:K-Meleon
    pref("general.useragent.vendorSub", "1.5");        K-Meleon的版本为:1.5

    pref("kmeleon.MRU.maxURLs", 16);                      最近访问地址记录:16个
    pref("kmeleon.MRU.behavior", 2);                        最近访问地址记录保存类型: 0 所有 / 1 域名 / 2 仅输入的 / 3 不保存
    pref("kmeleon.general.homePage", "");                设置主页网址
    pref("kmeleon.general.startHome", false);            启动时打开主页: true 是 / false 否
    pref("kmeleon.general.offline", false);                  离线浏览: true 是 / false 否
    pref("kmeleon.general.openurl", "ID_OPEN_LINK");        点击链接默认在当前标签打开,如果改成"ID_OPEN_LINK_IN_BACKGROUND",则是默认在背景标签打开
    pref("prefs.converted-to-utf8", true);                    把配置文件的编码方式为 utf-8: true 是 / false 否

    pref("kmeleon.general.sourceCommand", "");        察看网页源码的外部编辑器地址(例如C:\WINDOWS\notepad.exe,要写成C:\\WINDOWS\\notepad.exe)
    pref("kmeleon.general.sourceEnabled", false);      true 用外部编辑器察看网页源码 / false 用kmeleon本身的源码察看器
    pref("view_source.wrap_long_lines", true);          kmeleon本身的源码察看器是否自动换行

    pref("kmeleon.general.mode", "LAYERS ONLY");    所有的窗口以标签形式打开

    /**************插件部分*********************/
    pref("kmeleon.plugins.bmpmenu.load", true);        菜单图标支持插件是否载入: true 是 / false 否
    pref("kmeleon.plugins.rebarmenu.load", true);        菜单拖动支持插件,没有这个插件,菜单栏就无法拖动,只能以windows固定形式出现
    pref("kmeleon.plugins.crash.load", false);              浏览器崩溃报告
    pref("kmeleon.plugins.fullscreen.load", true);          全屏插件
    pref("kmeleon.plugins.history.load", true);              历史记录插件
    pref("kmeleon.plugins.toolbars.load", true);            工具栏插件
    pref("kmeleon.plugins.luamacro.load", true);          luamacros插件
    pref("kmeleon.plugins.macros.load", true);              macros插件
    pref("kmeleon.plugins.searchbar.load", true);          搜索栏插件
    pref("kmeleon.plugins.sessions.load", true);            线程插件

    pref("kmeleon.plugins.searchbar.title", "");              搜索栏标题

    pref("kmeleon.plugins.bookmarks.load", true);          书签(收藏夹)插件 是否载入: true 是 / false 否
    pref("kmeleon.plugins.bookmarks.chevron", true);    书签(收藏夹)是否显示网站图标
    pref("kmeleon.plugins.bookmarks.menuAutoDetect", true);        书签(收藏夹)bookmark.html文件默认位置
    pref("kmeleon.plugins.bookmarks.openurl", "ID_OPEN_LINK");  默认在当前标签打开书签(收藏夹)网址,如果改成"ID_OPEN_LINK_IN_NEW_TAB",为在新标签打开;"ID_OPEN_LINK_IN_BACKGROUNDTAB",则是在背景标签打开

    pref("kmeleon.plugins.favorites.load", true);              直接使用IE的收藏夹插件 是否载入: true 是 / false 否
    pref("kmeleon.plugins.favorites.menuAutoDetect", true);
    pref("kmeleon.plugins.favorites.openurl", "ID_OPEN_LINK");

    pref("kmeleon.plugins.hotlist.load", false);                  直接使用opera的书签插件 是否载入: true 是 / false 否
    pref("kmeleon.plugins.hotlist.menuAutoDetect", true);
    pref("kmeleon.plugins.hotlist.openurl", "ID_OPEN_LINK");

    pref("kmeleon.plugins.gestures.load", true);                    鼠标手势插件 是否载入: true 是 / false 否
    pref("kmeleon.plugins.gestures.down", "ID_CLOSE_TAB");        鼠标手势 向下=关闭标签
    pref("kmeleon.plugins.gestures.downleft", "ID_OPEN_LINK_IN_BACKGROUNDTAB");              鼠标手势 左下=背景标签打开链接
    pref("kmeleon.plugins.gestures.downright", "ID_OPEN_LINK_IN_BACKGROUNDTAB");              鼠标手势 右下=背景标签打开链接
    pref("kmeleon.plugins.gestures.left", "ID_NAV_BACK");              鼠标手势 左=后退
    pref("kmeleon.plugins.gestures.right", "ID_NAV_FORWARD");              鼠标手势 右=前进
    pref("kmeleon.plugins.gestures.up", "ID_NEW_TAB");              鼠标手势 上=开新标签
    pref("kmeleon.plugins.gestures.upleft", "macros(top_level)");              鼠标手势 左上
    pref("kmeleon.plugins.gestures.upright", "sessions(undo)");              鼠标手势 右上=恢复关闭窗口

    //****************************标签栏****************************/

    //*—————————K-Meleon1.5, K-MeleonCCF ME, K-MeleonCCF ME极简版—————————*/
    pref("browser.tabs.autoHide", false);                  只有一个标签时,是否自动隐藏标签: true 是 / false 否
    pref("browser.tabs.warnOnClose", false);          关闭浏览器是否确认
    pref("kmeleon.tabs.OnDoubleClick", 0);              双击标签时: 0 关闭标签/1 新建标签 /2 显示标签菜单
    pref("kmeleon.tabs.OnMiddleClick", 0);              中键点击标签时: 0 关闭标签/1 新建标签/2 显示标签菜单
    pref("kmeleon.tabs.OnRightClick", 2);              右键击标签时: 0 关闭标签/1 新建标签/2 显示标签菜单
    pref("kmeleon.tabs.catchOpen", 1);               
    pref("kmeleon.tabs.onCloseLast", 1);                关闭最后一个标签时 0 关闭K-Meleon /1 打开空白标签 /2 什么都不做
    pref("kmeleon.tabs.onCloseOption", 2);            关闭标签时: 0 显示紧邻的右边一个标签/ 1 显示紧邻的左边一个标签 / 2, 显示上一次选中的标签
    pref("kmeleon.tabs.onOpenOption", 1);              新建的标签 0 在标签栏最后位置 / 1 在当前标签后

    //*—————————K-Meleon1.1*以layer插件模拟标签—————————*/
    pref("kmeleon.plugins.layers.confirmClose", false);              是否确认关闭标签: true 是 / false 否
    pref("kmeleon.plugins.layers.load", false);                          layer插件载入: true 是 / false 否
    pref("kmeleon.plugins.layers.rebar", true);
    pref("kmeleon.plugins.layers.style", 2);
    pref("kmeleon.plugins.layers.catchOpen",true);
    pref("kmeleon.plugins.layers.catch",true);
    pref("kmeleon.plugins.layers.load",true);

    pref("kmeleon.plugins.privacy.load", true);                        隐私工具是否载入: true 是 / false 否  (作用:清除缓存,cookie,历史记录等等…)
    pref("kmeleon.plugins.privacy.clearCache", 0);                 
    pref("kmeleon.plugins.privacy.clearCookies", 0);
    pref("kmeleon.plugins.privacy.clearHistory", 0);
    pref("kmeleon.plugins.privacy.clearMRU", 0);
    pref("kmeleon.plugins.privacy.clearSignOn", 0);

    pref("kmeleon.plugins.sessions.load", true);                    线程插件是否载入: true 是 / false 否
    pref("kmeleon.plugins.sessions.list", "last,");                   

    // ********************************界面 ****************************************/
    pref("kmeleon.general.toolbars_locked", true);                锁定界面: true 是 / false 否

    pref("kmeleon.display.URLbarTitle", "");                            地址栏左边的标题显示什么(这里为空,就是没有标题)
    pref("browser.display.use_system_colors",  true);            是否使用系统主题的色彩配置(主要作用于空白标签的颜色): true 是 / false 白色
    pref("kmeleon.display.backgroundImage", "");                  背景图片位置(例如C:\bg.jgp,要写成C:\\bg.jgp)
    pref("kmeleon.display.backgroundImageEnabled", true);  是否使用北京图片

    pref("kmeleon.favicons.show", true);                                是否显示网站图标: true 是 / false 否
    pref("kmeleon.favicons.cached", false);                            是否保存网站图标: true 是 / false 否
    pref("browser.chrome.site_icons", false);                       
    pref("browser.chrome.favicons", false);                           

    pref("kmeleon.display.maximized", false);                          启动时是否最大化: true 是 / false 否 (目前有bug,设置成true也不能最大化)
    pref("kmeleon.display.height", 740);                                  K-Meleon的高度(单位:像素)
    pref("kmeleon.display.width", 970);                                    K-Meleon的宽度(单位:像素)
    pref("kmeleon.display.XPos", 64);                                    K-Meleon的X轴位置(单位:像素)
    pref("kmeleon.display.YPos", 48);                                    K-Meleon的Y轴位置(单位:像素)

    pref("kmeleon.toolband.Tabs.break", 0);                            标签栏后换行: 1 是 / 0 否
    pref("kmeleon.toolband.URL Bar.index", 0);                        地址栏位置为第一
    pref("kmeleon.toolband.Tabs.index", 1);                            标签栏位置为第二
    pref("kmeleon.toolband.Tabs.visibility", true);                    是否显示标签栏
    pref("kmeleon.toolband.URL Bar.break", 1);                        地址栏后换行: 1 是 / 0 否
    pref("kmeleon.toolband.URL Bar.size", 200);                      地址栏宽度为: 200像素
    // pref("kmeleon.toolband.Tabs.size", 760);                        标签栏宽度为: 760像素
    // 同一行个栏目的宽度之和 = K-Meleon宽度 – 10;
    // 说明:b23版本必须要指明各个栏目宽度,不然界面会乱.其它版本如果在同一行只有两个项目, 只需要指定一个,另一个就会自动;
    pref("kmeleon.toolband.URL Bar.visibility", true);                是否显示地址栏

    // ****************隐私设置********************************************/
    pref("network.cookie.cookieBehavior", 1);            cookie的处理  0: 接受所有cookie /1: 只接受源服务器的cookie /2: 不接受cookie /3:用p3p

    // *———–UserAgent设置———————*/
    pref("kmeleon.privacy.useragent1.name", "MSIE 6.0");
    pref("kmeleon.privacy.useragent1.string", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
    pref("kmeleon.privacy.useragent2.name", "Firefox 2.0");
    pref("kmeleon.privacy.useragent2.string", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
    pref("kmeleon.privacy.useragent3.name", "Opera 8.54");
    pref("kmeleon.privacy.useragent3.string", "Opera/8.54 (Windows NT 5.1; U) [en]");

    pref("capability.policy.restrictedpopups.Window.open", "allAccess");
    pref("capability.policy.restrictedpopups.sites", "");

    pref("dom.disable_open_during_load", true);            弹出窗口屏蔽

    pref("security.enable_java", false);                            允许执行java : true 是 / false 否
    pref("security.warn_entering_secure", false);           
    pref("security.warn_leaving_secure", false);
    pref("security.warn_entering_weak", true);
    pref("security.warn_submit_insecure", false);
    pref("security.warn_viewing_mixed", false);

    pref("signon.rememberSignons", false);                  记住填表内容: true 是 / false 否

    //************搜索**********************************/
    pref("kmeleon.general.searchEngine", "http://www.google.com/search?q=");        默认搜索引擎地址(必须是kmeleon.plugins.macros.search.engine[0..?].url里列出的)
    pref("kmeleon.general.searchEngineName", "Google");                                            默认搜索引擎名称(必须是kmeleon.plugins.macros.search.engine[0..?].name里列出的)

    pref("kmeleon.plugins.macros.search.locked", true);              锁定搜索引擎

    pref("kmeleon.plugins.macros.search.engine0.name", "Google");                        搜索引擎名称
    pref("kmeleon.plugins.macros.search.engine0.url", "http://www.google.com/search?q=");              搜索引擎地址
    pref("kmeleon.plugins.macros.search.engine1.name", "Baidu");
    pref("kmeleon.plugins.macros.search.engine1.url", "http://www.baidu.com/s?ie=utf-8&wd=");
    pref("kmeleon.plugins.macros.search.engine2.name", "Wikipedia");
    pref("kmeleon.plugins.macros.search.engine2.url", "http://en.wikipedia.org/wiki/Special:Search/");
    pref("kmeleon.plugins.macros.search.engine3.name", "DictCN");
    pref("kmeleon.plugins.macros.search.engine3.url", "http://www.dict.cn/search/?q=");

    // ***********************下载*************************/
    pref("kmeleon.general.CloseDownloadDialog", true);                下载完成时关闭下载对话框
    pref("kmeleon.general.saveDir", "F:\\Download Files\\");            保存目录设置
    pref("kmeleon.download.dir", "F:\\Download Files\\");                下载目录设置
    pref("kmeleon.download.saveDir", "F:\\Download Files\\");
    pref("kmeleon.download.lastDir", "F:\\Download Files\\");          上次使用的下载目录

    pref("kmeleon.download.askOpenSave", false);                        下载是否要经过确认 : true 是 / false 否
    pref("kmeleon.download.SaveUnkownContent", true);              保存未知内容
    pref("kmeleon.download.showMinimizedDialog", false);            下载对话框最小化
    pref("kmeleon.download.closeDownloadDialog", true);              下载完成自动关闭对话框                   
    pref("kmeleon.download.flashWhenCompleted", false);              下载完成时任务栏闪动
    pref("kmeleon.download.saveUseTitle", true);                  true: 以网页标题为文件名保存网页/ false: 以网页本身的文件名保存网页
    pref("kmeleon.download.useDownloadDir", true);            使用"kmeleon.download.dir"定义的目录保存下载内容

    pref("browser.downloadmanager.behavior", 1);          1 打开下载进度对话框/ 2 不用下载进度对话框

    // ****************加速设置****************************/
    pref("browser.display.show_image_placeholders", false);            图片未载入时,是否显示图片图标: true 是 / false 否

    pref("Network.dns.disableIPv6", true);                    是否禁用IPv6
    pref("network.cookie.prefsMigrated", true);

    pref("network.dnsCacheExpiration", 3600);              DNS缓存条目过期的时间(单位:秒)
    pref("network.dnsCacheEntries", 512);                    DNS缓存中保存条目的数目

    // Cache Prefs
    pref("browser.cache.memory.capacity", -1);              浏览器内存缓存大小(单位KB)  -1: 自动
    pref("browser.cache.disk.capacity", 32768);            浏览器磁盘缓存大小(单位KB)  -1: 自动  (32768=32M)

    // ***************Gecko引擎调整*****************************/
    // HTTP Connection Prefs
    pref("network.http.max-connections", 64);
    pref("network.http.max-connections-per-server", 20);
    pref("network.http.max-persistent-connections-per-server", 8);
    pref("network.http.max-persistent-connections-per-proxy", 16);
    //pref("network.http.keep-alive", false);
    //pref("network.http.proxy.keep-alive", false);
    // HTTP Pipelining Prefs
    pref("network.http.pipelining", true);
    pref("network.http.proxy.pipelining", true);
    pref("network.http.pipelining.firstrequest", true);
    pref("network.http.pipelining.maxrequests", 16);
    // Rendering Prefs
    pref("browser.sessionhistory.max_viewers", 4);
    pref("nglayout.initialpaint.delay", 10);
    pref("content.notify.ontimer", true);
    pref("content.notify.interval", 10000);
    pref("content.notify.backoffcount", 200);
    pref("content.interrupt.parsing", true);
    pref("content.max.tokenizing.time", 50000);
    pref("content.switch.threshold", 1000000);

    // ***************字体设置*****************************/
    pref("intl.charset.detector", "universal_charset_detector");        自动监测网页编码设置
    pref("font.minimum-size.x-unicode", 10);                      unicode最小字体大小
    pref("font.minimum-size.x-western", 10);                      西方字体最小字体大小
    pref("font.minimum-size.zh-CN", 10);                            简体中文最小字体大小
    pref("font.minimum-size.zh-TW", 10);                            繁体中文最小字体大小
    pref("font.askWhenNeeded", false);                              缺少字体支持时是否弹出警告框

    /*****************杂项*******************************/
    pref("kmeleon.find.matchCase", false);                          查找时 匹配大小写
    pref("kmeleon.find.searchBackwards", false);                false: 向后查找  / true: 向前查找
    pref("kmeleon.find.wrapAround", true);                         
    pref("kmeleon.find.highlight", true);                                高亮显示查找到的内容

    pref("mousewheel.withnokey.numlines",6);                    一个滚轮动作滚动行数
    pref("mousewheel.withnokey.sysnumlines",false);          是否使用系统定义的滚动行数
    pref("mousewheel.withcontrolkey.action",3);                 
    //pref("general.smoothScroll", true);                              平滑滚动

    pref("browser.enable_automatic_image_resizing", true);          大图片自动缩小到窗口大小

    pref("browser.xul.error_pages.enabled", true);            网页连接不上时,显示自带的错误页

    //pref("kmeleon.urlbar.dropdown_lines", 10);        地址栏下拉菜单显示行数
    pref("browser.urlbar.autoFill", true);                      地址栏自动完成
    pref("browser.urlbar.autocomplete.enabled", true);      地址栏自动完成

    pref("browser.link.open_external", 3);  外部程序调用浏览器时  0,默认窗口/ 1,当前窗口或标签/ 2, 新窗口/3, 新标签

    // handle links targeting new windows
    //2 (default): In a new window 3: In a new tab 1 (or anything else): In the current window
    pref("browser.link.open_newwindow", 3);    链接要求开新窗口时, 打开:  1,当前窗口 2, 默认窗口/ / 3, 新标签

    // 0: no restrictions – divert everything
    // 1: don’t divert window.open at all
    // 2: don’t divert window.open with features
    pref("browser.link.open_newwindow.restriction", 0);

    pref("kmeleon.display.newWindowOpenAs", 0);        新建窗口或标签时显示: 0,空白页/  1, 主页 / 2, 复制当前窗口
    pref("kmeleon.display.newWindowURL", "");            新建窗口或标签时显示的网址
   

 Posted by at 下午 8:19