[ Content | Sidebar ]

Archives for 三月, 2009

ie6下filter造成图片出现白点

<html>
正常的图片<br />
<img src="http://lh3.ggpht.com/_l8FcMjS-xnI/Sb3wh8kSk6I/AAAAAAAAExc/DMUyic7Odas/screenshot_003.jpg" /> <br />
添加透明之后<br />
<img style="filter:alpha(opacity=100);" src="http://lh3.ggpht.com/_l8FcMjS-xnI/Sb3wh8kSk6I/AAAAAAAAExc/DMUyic7Odas/screenshot_003.jpg"  />
</html>
Copy Code | Run Code

//g.test()

又火星了~

<html>
<script>
function log( str )
{
    if ( window.console )
    {
        console.log( str ); 
    }
    else
    {
        alert( str );
    }
}
 
var reg = /^\s*$/g;
log( reg.test( ' ' ) );
log( reg.test( ' ' ) );
 
var reg = /^\s*$/;
log( reg.test( ' ' ) );
log( reg.test( ' ' ) );
</script>
</html>
Copy Code | Run Code

加了g参数后test的行为类似exec了
http://www.w3school.com.cn/js/jsref_obj_regexp.asp

new window.ActiveXObject( ‘Microsoft.XMLHTTP’ );

如此简单的一句貌似很正确的语句在大部分用户的ie浏览器里都是好使的,但是小部分不好使,什么原因,待我细细查来~

<html>
<script>
new window.ActiveXObject( 'Microsoft.XMLHTTP' );
</script>
</html>
Copy Code | Run Code

js动态加载简记

适用:页面使用大量的js做交互和ajax,然而又不像gmail,一次加载之后不会刷新页面,所以如果引入大量js就会拖慢页面的加载速度。这时如果只加载每个页面都需要初始化的js,其他js只有当需要时才动态加载进来,就会大大提高页面加载速度。

动态加载的方法:

//示例代码
dynamicLoad = function( file )
{
    each( file.funcs , function( i , func )
    {
        //为可能用到的函数声明一个同名的代理函数
        window[ func ] = function()
        {
            var ars = arguments;
            //当页面中调用到此函数时,会首先把自己注销
            window[ func ] = null;
            //加载相应的js文件
            loadFile( file.file , function()
            {
                //js加载完成之后,调用js中声明的同名函数,完成动态加载
                window[ func ].apply( null , ars );
            });
        };
    });
};
 
dynamicLoad({
    file : 'http://xxx.com/xxx.js',
    funcs : [ 'chatWith' , 'showProfile' ]
});
Copy Code 

通过dynamicLoad方法注册了一个需要动态加载的函数,参数的file为需要动态加载的文件,funcs为js中实现的函数,当页面中触发调用此函数时,将动态加载对应文件。

需要解决的问题:

1  避免重复加载

这个问题很好解决,只需要做一个数组来存储已经加载的脚本,页面onload的时标记页面中已经加载的js,动态加载时判断某一脚本是否已加载,没有则加载此文件并标记为已加载。

2 在一个js中加载另一js时如何解决版本号问题

开发时写在页面里的脚本可能是xxx.js?ver=$$$,更新之后$$$会替换成对应的svn版本号,然而在js中动态加载另一文件时如何获知该js的版本号呢?

我想到的一种方法:

<script vsrc="xxx.js?ver=$$$"></script>
Copy Code 

把页面中需要动态加载的js的src属性改成vsrc,这样就可以得到该文件的版本号

shell:创建单独的样式hack文件

不管怎么说,通过”<!–[if lte IE 6]>”的形式单独加载patch文件是一种不错的做法,用ff的用户不用为这些为ie而做的恶心patch浪费流量,页面的渲染速度也许会有所提升。

下午靖威同学跟我说,可不可以写一个脚本可以提取样式表中的hack,生成单独的hack文件,这样可以大大减少单独维护hack文件的成本。感觉想法不错,难度也不是很大,参考了一下shell说明,写了几句,先备个忘,下周有时间测试一下。。

#!/bin/bash
echo "$1/csspro/"
find "$1/csspro/" -name *.css | grep -v "ie[67]" > /tmp/allcss.tmp
cat /tmp/allcss.tmp | xargs -i sed -i '/^$/d;s/\\{\\s/\\{/;s/\\;\\s/\\;/;s/\\s\\}/\\}/;s/\/\*.*\*\///;/^[\t ]*\/\*/,/\*\/[\t ]*$/d' {}
cat /tmp/allcss.tmp | xargs -i sed -n '/* *html/p' {}  >> "$1/csspro/patch/ie6.css"
cat /tmp/allcss.tmp | xargs -i sed -n '/*+html/p' {}  >> "$1/csspro/patch/ie7.css"
cat /tmp/allcss.tmp | xargs -i sed -i '/* *html/d;/*+html/d' {}
rm /tmp/allcss.tmp
Copy Code