最近做了一个webim的项目,使用长连接做push,在chrome和ie下有些小问题
1. chrome的左下角下一直显示等待push.xx.com的响应
解决方法:接到请求立刻返回http头就可以了,不等到有了推送再返回http头
2.ie下对于每个域名同一时刻最多只能有两个并发请求,如果开多个窗口(这个限制不是针对单个窗口的),有的请求便会被阻塞。
解决方法:对每个窗口使用不同的请求域名
使用三级泛域名配置起来最简单,例如:123.push.xx.com.但是JS里涉及到跨域的问题,所以还是要使用push-123.xx.com这样的二级域名。查了下bind9的手册可以这么搞
;示例
$GENERATE 0-100000 push-$ IN A xx.xx.xx.xx
Copy Code
这样ie下JS可以用时间戳或随机数决定一个domain去请求,不会产生阻塞
有必要给blogo2加个追加功能。。可以直接把mail追加到最新一篇blog的后面
————————
gcc之预处理js和as,下面的makefile主要处理flash的两个版本,SSL版本要比普通版本大150K。。感谢gcc
FLAGS="-DDEBUG"
define make-all
gcc $(FLAGS) $1 -E -x c src/swfsocket.js -o $2/swfsocket.js
gcc $(FLAGS) $1 -E -x c src/swf/SwfSocket.rel.as -o src/swf/SwfSocket.as
sed -i "/^#/d" $2/swfsocket.js
sed -i "/^#/d" src/swf/SwfSocket.as
cd src/swf; \
mxmlc -static-link-runtime-shared-libraries -output=./SwfSocket.swf SwfSocketMain.as
mv src/swf/SwfSocket.swf $2
endef
main:
$(call make-all,,bin)
$(call make-all,-DSSL,bin_ssl)
Copy Code
———–
post by gmail~
header.js
function SSL_socket()
{
alert('SSL');
}
function socket()
{
alert('normal');
} Copy Code
main.js
#include "header.js"
#ifdef _SSL
var socket = new SSL_socket();
#else
var socket = new socket();
#endif
Copy Code
gcc -E -x c main.js
# 1 "main.js"
# 1 ""
# 1 ""
# 1 "main.js"
# 1 "header.js" 1
function SSL_socket()
{
alert('SSL');
}
function socket()
{
alert('normal');
}
# 2 "main.js" 2
var socket = new socket();
gcc -E -x c -D_SSL main.js
# 1 "main.js"
# 1 ""
# 1 ""
# 1 "main.js"
# 1 "header.js" 1
function SSL_socket()
{
alert('SSL');
}
function socket()
{
alert('normal');
}
# 2 "main.js" 2
var socket = new SSL_socket();
———–
post by gmail~
有没有可能写一套代码适应以下三种情况:
1. 客户端没有开启javascript,或者使用ucweb一类的弱智浏览器访问时,功能没有影响
2. 客户端开启了javascript,每个页面都有单独加载的js,但是禁用ajax,只帮助用户交互
3. 客户端开启了javascript,为了提高载入速度,尽量使所有操作用ajax完成
略有所得: http://www.blogo2.com
源代码: http://code-of-emptyhua.googlecode.com/svn/trunk/blogo2
没有禁用js的时候,页面切换,表单提交(注册和登录没有用)尽量的使用ajax,而且部分操作会使用弹层(登录后的管理),禁用js之后,则所有操作换成普通表单提交在页面之间跳来跳去。。
还有一个功能没有开启,就是可以选择不用ajax,但是独立开的页面js依然有效。
有兴趣的同学可以check源代码,这种模式的实现:
1. 开发的时候禁用ajax,单个页面开发,而且要求禁用js时业务可以走通,页面内的js和css统一由模板引入。
2. 对需要开启ajax的链接增加hook,例如data-ajax=”dialog:{}”,则表明在开启ajax模式后,点击这个链接需要弹窗
3. ajax模式下只需要对单个页面更换特有的模板,动态加载需要的js和css即可。
这种设计的特点:
1. 尽量一个人包前后端。。
2. json不潮了,ajax返回html代码,优点是js不用套页面了,缺点是流量大
over,虽然没有完美的代码,但是我尽量~
———–
post by gmail~
做前端的同学都应该听说或者用过,是一段脚本,可以让ie实现css3里的圆角和阴影效果:http://fetchak.com/ie-css3/
用法大致如下
.box {
-moz-border-radius: 15px; /* Firefox */
-webkit-border-radius: 15px; /* Safari and Chrome */
border-radius: 15px; /* Opera 10.5+, future browsers, and now also Internet Explorer 6+ using IE-CSS3 */
-moz-box-shadow: 10px 10px 20px #000; /* Firefox */
-webkit-box-shadow: 10px 10px 20px #000; /* Safari and Chrome */
box-shadow: 10px 10px 20px #000; /* Opera 10.5+, future browsers and IE6+ using IE-CSS3 */
behavior: url(ie-css3.htc); /* This lets IE know to call the script on all elements which get the 'box' class */
} Copy Code
最近用到了这个东西,发现动态改变div的内容之后,这段脚本生成的vml会出现变形。。
所以加了一个手动刷新的函数,通过innerHTML赋值之后调用一下就可以了
el.innerHTML = '....';
if(window.update_css3_fix) update_css3_fix(el);
Copy Code
如果使用jquery就不用这么麻烦,在你的框架里加一段
(function()
{
if (!jQuery.browser.msie) return;
jQuery.fn.__ohtml__ = jQuery.fn.html;
jQuery.fn.html = function(value)
{
jQuery(this).__ohtml__(value);
this.each(function()
{
update_css3_fix(this);
});
return this;
};
})(); Copy Code
另外官网下载的脚本还会产生yourdomain/none的404请求,也已经修复
修改之后的文件ie-css3.htc