浙江寻擎SEO团队官方网站 - 程序与优化http://www.zyseo.org/浙江SEO,宁波SEO,Google排名,Google优化,英文SEO,外贸网络推广,这里让你领略最新的搜索引擎技术! - RainbowSoft Studio Z-Blog 1.8 Devo Build 80201zh-CN 版权所有 浙江寻擎SEO团队 技术完全保留.Sun, 10 Mar 2013 10:21:23 +0800HTML解决乱码问题null@null.com (zyseo)http://www.zyseo.org/post/ruanma.htmlMon, 24 Aug 2009 16:41:50 +0800http://www.zyseo.org/post/ruanma.htmlHTML解决乱码问题其中可以会产生乱码,解决方案如下:
import java.io.BufferedReader; 
import java.io.ByteArrayInputStream; 
import java.io.ByteArrayOutputStream; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.transform.Source; 
import javax.xml.transform.Templates; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource; 
import org.w3c.dom.Document; 
public  Test { 
public  String buildHtml(String xml, String xsl) throws Exception { 
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory 
.Instance; 
DocumentBuilder builder = docBuilderFactory.DocumentBuilder; 
Document xmlDoc = builder 
.parse( ByteArrayInputStream(xml.getBytes)); 
Source xmlSource =  DOMSource(xmlDoc); 
StreamSource xslSource =  StreamSource( ByteArrayInputStream(xsl 
.getBytes)); 
TransformerFactory tf = TransformerFactory.Instance; 
Templates transformation = tf.Templates(xslSource); 
Transformer transformer = transformation.Transformer; 
ByteArrayOutputStream bos =  ByteArrayOutputStream; 
StreamResult result =  StreamResult(bos); 
transformer.transform(xmlSource, result); 
String(bos.toByteArray, "UTF-8");// 指定UTF-8解决乱码问题 

public  String readFile(File file) throws IOException { 
StringBuffer sb = null; 
BufferedReader in = null; 
try { 
in =  BufferedReader( FileReader(file)); 
sb =  StringBuffer; 
for (String line; (line = in.readLine) != null;) { 
sb.append(line + "\r\n"); 

} finally { 
(in != null) 
in.close; 

sb.toString; 

public  void (String args) throws Exception { 
String xmlStr = readFile( File(Test..getResource( 
"test.xml").getFile)); 
String xslStr = readFile( File(Test..getResource( 
"test.xsl").getFile)); 
String html = buildHtml(xmlStr, xslStr); 
.out.prln(html); 


import java.io.BufferedReader; 
import java.io.ByteArrayInputStream; 
import java.io.ByteArrayOutputStream; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.transform.Source; 
import javax.xml.transform.Templates; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerFactory; 
import javax.xml.transform.dom.DOMSource; 
import javax.xml.transform.stream.StreamResult; 
import javax.xml.transform.stream.StreamSource; 
import org.w3c.dom.Document; 
 

]]>
程序与优化http://www.zyseo.org/post/ruanma.html#commenthttp://www.zyseo.org/http://www.zyseo.org/feed.asp?cmt=457http://www.zyseo.org/cmd.asp?act=tb&id=457&key=a388d120
网站优化与广告优化的不同方法null@null.com (zyseo)http://www.zyseo.org/post/wlyhyggyhdbt.htmlTue, 18 Aug 2009 15:26:01 +0800http://www.zyseo.org/post/wlyhyggyhdbt.html通常人们说起对广告的优化只是提到关键词,也就是在页面设置可以获得高价格广告相关性关键词,但可以这样去做并不能说是合法的优化。
有一种非常行之有效的优化便是域名优化,可以通过构建适当的二级域名来使之出现相关广告。在某些时候,对域名的识别要优先于对关键词的识别,网页优化为什么要使用html的meta标签?,所以可以通过该途径获得关联性较高的广告,尤其是网页内容还未被抓取出现公益广告的情况

    如果已经申请了广告联盟并在网站上进行了投放,如何提高收益就成了首要问题。不同的广告类型有不同的广告优化方法。

  一、摆放不同类型广告有讲究

  点击广告投放位置最重要

  点击类型的广告一般称为CPC(按点击付费),一般是根据广告被点击的次数向网站付费。大多数个人网站都会投放这种形式的广告,只要产生点击就可以获得收入。

  一般来说,网页中热门的位置才会被用户关注到,所以在投放点击广告时,一个网页的头部和文章部分是广告投放的最佳位置。对于下载类型的网站来说,在下载地址附近则是最佳的点击广告投放位。

  除了广告的投放位置以外,广告的大小也是能否吸引访客的关键,这种形式的广告一般比其他类型广告有着更高的点击率,seo优化 SEO中常见的错误有哪些? ,这样一来也就能够获得更多的广告收入。广告不能占据网页中的大部分位置,否则会让访客降低对网站的好感度。

CPS广告 用户需求是关键

    在中小型站点中的另一种热门的广告类型就是CPS(按销售付费)广告了,它是一种按照产品销售数量来计算广告费用的广告。如果用户通过广告链接进入网站,并且产生了购买行为,就会按照一定的比例支付广告费用。

  这种广告类型比较适合专业性质的网站,适合投放图书类CPS广告。如果网站投放了与内容并不相关的CPS广告,则很难让人产生购买行为,当然就没有任何广告收入了。

  弹窗广告 投放也有好技巧

  对于大多数个人网站来说,弹窗广告也是一种不错的广告类型,它的优势是有着稳定的广告来源,不需要点击也能够产生收入。并非用户自愿点击,网站优化,而是自动在用户浏览网站时弹出,对于用户的浏览体验有着一定的影响。

  所以我们在投放弹窗广告时,必须注意的是要选择广告类型,不能选择有低俗内容的广告。另外弹窗广告的数量也不宜过多,可以采用Cookies的方式让弹窗针对一个用户只显示一次。

  视频广告 不宜影响正常浏览

  除了大家常见的各类文字或者图片、Flash类型的网络广告,目前视频广告联盟也越来越多,这类视频广告通常播放视频推荐的内容,只要播放就能够产生广告费用。对于影视等类型的网站来说,视频广告也能极大地丰富网站内容。

  由于视频广告通常有声音等元素,很容易对用户正常浏览网页造成影响,在投放视频广告时要结合网站的类型

  二、如何让广告单价更高

  大多数中小型网站都在投放谷歌AdSense广告,讲解广告的一些实用优化手法。

  适当过滤低价广告

  在Google网站管理界面,有一个广告的eCPM数值,它指的是每一千次展示可以获得的广告收入,通常一些泛滥的广告会造成广告单价降低,如一些交友、游戏等类型的广告,甚至还有一些引诱点击的广告等等,这些广告通常都有一个特点,就是点击价格非常低。

让广告与内容更加匹配
要使点击率增加,可以让广告与网站内容更加匹配。在谷歌的广告联盟中,可以自己设置广告的样式,包括广告大小、色彩搭配等。如让广告不带边框,直接放置于文章内容中,将广告底色设置成文章页面颜色,将广告文字颜色设置成网站中字体相似的颜色。

页面设计方面的搭配,在网站内容上,可以进行适当配合,因为谷歌广告采用智能分析技术,通过网站页面的内容显示与主题相关的广告。要是一个页面的主题过多,就可能造成广告与内容不相关的现象,这样一来就会造成广告无人点击的后果,将网页与主题对应,一个网页只有这个主题的内容。另外,诸如在文章列表页或者网站首页等页面放置谷歌广告,也是不错的方法,网站优化 网站SEO优化的意义 。

  经常更换广告位置

  无论是对于谷歌广告还是其他网站广告,如果广告总是出现在网页的同一位置,就会让访客很清楚地知道它是广告,所以导致每次都直接跳过。这样一来网站的广告收入当然就会大大降低。

  对于这样的情况,经常更换广告位置是不错的选择,适用于拥有固定访客的社区类型的网站。在更换广告位置的时候同样需要以用户体验为主,不要将广告放置得太过突兀,也不要在一个页面放置太多的广告。使用区段定位,您可以将广告单元定位到博客的特定部分,也可以滤除不相关部分 。熟悉 HTML 的用户才尝试实施区段定位。


在没有盲目使用的情况下并不违反政策。对于关键词优化,建议大家最好不要采取这种方式,如果关键词设置与网页内容毫无关系的话,会被认为是刻意影响广告。具体操作形式靠我们去实践的啊。

]]>
程序与优化http://www.zyseo.org/post/wlyhyggyhdbt.html#commenthttp://www.zyseo.org/http://www.zyseo.org/feed.asp?cmt=454http://www.zyseo.org/cmd.asp?act=tb&id=454&key=679a570e
CSS布局口诀null@null.com (zyseo)http://www.zyseo.org/post/CSSbjkj.htmlTue, 11 Aug 2009 17:30:48 +0800http://www.zyseo.org/post/CSSbjkj.htmlCSS布局口诀
一、IE边框若显若无,须注意,定是高度设置已忘记;

二、浮动产生有缘故,若要父层包含住,紧跟浮动要清除,容器自然显其中;

三、三像素文本慢移不必慌,高度设置帮你忙;

四、兼容各个浏览须注意,默认设置行高可能是杀手;

五、独立清除浮动须铭记,行高设无,高设零,设计效果兼浏览;

六、学布局须思路,路随布局原理自然直,轻松驾驭html,流水布局少hack,代码清爽,兼容好,友好引擎喜欢迎。

七、所有标签皆有源,只是默认各不同,span是无极,无极生两仪—内联和块级,img较特殊,但也遵法理,其他只是改造各不同,一个*号全归原,层叠样式理须多练习,万物皆规律。

八、图片链接排版须小心,图片链接文字链接若对齐,padding和vertical-align:middle要设定,虽差微细倒无妨。

九、IE浮动双边距,请用display:inline。

十、列表横向排版,列表代码须紧靠,空隙自消须铭记。

]]>
程序与优化http://www.zyseo.org/post/CSSbjkj.html#commenthttp://www.zyseo.org/http://www.zyseo.org/feed.asp?cmt=453http://www.zyseo.org/cmd.asp?act=tb&id=453&key=8a0881bb
一行代码兼容IE8null@null.com (zyseo)http://www.zyseo.org/post/1hdmjrIE8.htmlMon, 03 Aug 2009 16:30:36 +0800http://www.zyseo.org/post/1hdmjrIE8.html只需要在页面中加入如下HTTP meta-tag:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
只要IE8读到这个标签,它就会自动启动IE7兼容模式,保证页面完整展示。
IE8出到BETA几了?一直没装,甚至连他的界面都没有预览过。听别人说IE8很像FF3,如果真是这样,那还不错。现在做网页也许要考虑下IE8吧,相信很多IE7的用户都自动升级成了IE8。如果你懒得针对IE8去做兼容,那么偷个懒,逃避一下,加这么一句代码就OK了。

这不是什么新话题。做WEB标准,在调试的时候需要兼顾主流浏览器,IE6和FF可以正常安装,但是在机器上同时安装IE6和IE7却很难。有个办法就是使用绿色IE7。
具体步骤:
1、下载IE7 Release 这个工具,本博客下载地址:

下载文件

1227950148_5591a0d2.rar


2、解压缩 IE7-Release.rar 到一个空目录中,例如 D:\IE7-Release
3、IE7安装文件——微软官方下载:,如果你不是Windows XP SP2操作系统,那就去找自己相应的。
4、将 IE7 的安装文件(例如:IE7-WindowsXP-x86-enu.exe)改名为IE7SetupFile.exe保存到D:\IE7-Release目录中(关键就是要和 IE7-Release.rar 解压缩出来的文件保存在同一个目录中)。
5、运行D:\IE7-Release 目录中的 IE7 Standalone Setup.bat 批处理程序。这个程序会解压缩 IE7 的安装文件到 Installation 子目录中。
6、运行 D:\IE7-Release 目录中的 ie7.bat 就可以启动 ie7 了。注意启动的时候会出现一个 dos 窗口,不能关闭这个窗口,15 秒后这个窗口会自动关闭。

这个方法我用来了好几次,屡试不爽。所以推荐一下。IE7 Release 这个工具貌似也要绝种了,不好找下载源,所以我特地传到了博客中。

]]>
程序与优化http://www.zyseo.org/post/1hdmjrIE8.html#commenthttp://www.zyseo.org/http://www.zyseo.org/feed.asp?cmt=452http://www.zyseo.org/cmd.asp?act=tb&id=452&key=e645ee3a
关于图片的盗链null@null.com (zyseo)http://www.zyseo.org/post/tupiadaolian.htmlMon, 15 Jun 2009 09:50:16 +0800http://www.zyseo.org/post/tupiadaolian.html对于图片的盗链,我终于无法继续忍受了,添加水印的方法基本上没有任何作用,过了这么长时间,盗链的情况依旧没有减少,盗链占用了太多的流量和系统资源,每天占用了10G多的流量,严重影响了我的博客的正常用户访问,因此我只好启用了ISAPI_Rewrite这个最终杀手来防止盗链,不过目前我允许bloglines、zhuaxia、google、baidu这几个网站引用我站图片,如果你也需要引用我站图片,请把域名告诉我,我审核后可以开放。

  ISAPI_Rewrite的httpd.ini内容写的是下面内容,如果你也遇到盗链的困扰,建议可以参考一下:

RewriteCond Host: (.+)
RewriteCond Referer: (?!http://(?:www\.williamlong\.info|www\.moon-blog\.com|www\.bloglines\.com|www\.zhuaxia\.com|www\.google\.com|cache\.baidu\.com)).+
RewriteRule .*\.(?:jpg|kmz|kml|zip) /block.gif [I,O]

  注释:第二行里面的域名是允许链接图片的网站列表,目前我允许我自己的两个站和另外bloglines、zhuaxia、google、baidu这四个网站引用我站文件,其他网站的引用被禁止。

  第三行是禁止引用的文件类型,包括jpg图片、Google Earth的kmz和kml、zip文件。当然,还可以增加其他类型,比如gif、rar等,因为我站没有那些文件,所以没有添加上去。

减少图片被盗用的十种方法

图片防盗: 是不想自己的图片被别人使用。

图片防盗链: 是不想自己的图片被别人使用,且消耗的是自己的服务器流量。

图片防盗是困难的,完美的图片防盗那几乎是不可能的。但还是有很多方法能够减少图片盗用,下面是10种,选一种你喜欢的吧。

隐藏图片

使用空白图片覆盖真实图片

这个方法可以让别人无法获取真实的图片,除非查看源代码。

你可以把真实的图片做为背景图片,而使用一张透明图片匹配尺寸并覆盖到真实图片上面。

例如:

<div id="image1" style="background-image: url(originalImage.jpg);">
<img src="blank.gif" height="250px" width="300px">
</div>

 

这样,当别人使用右键查看或保存图片的时候,得到的是这张透明图片。

这里是2个 JavaScript框架可以实现这种图片防盗链方法:

dwProtector for MooTools(http://davidwalsh.name/mootools-image-protector-dwprotector)

dwProtector for jQuery(http://davidwalsh.name/image-protector-plugin-for-jquery)

自动截切图片

Super Simple Image Tiles(http://supersimple.org/imagetiles/)

这是一个非常有效的图片防盗链方法。

它支持两种方案:

让用户下载到的是被裁切过的图片。

让用户下载到的是打上水印的图片。

当用户尝试下载图片的时候,它就会进行截切或添加水印操作,但是这个方法也有很大的劣势:

造成太多的服务器请求负荷,对网站整体性能影响不好

你将拥有许多的图片文件

使用带水印的图片 (预先生成)

预先给图片添加水印也是个防止图片被盗的有效方法,就算别人要盗,至少也为你免费宣传了一下自己的网站。

但缺点也来了:

图片会看的不清楚或不美观了(这对于图片展示类的网站尤其重要,但又正是该类网站特尤其图片防盗)

可以下载然后裁剪水印(当然,如果你是那种把水印放在图片中间或水印有图片这么1/3大的家伙,就不用担心这个问题了)

要手动添加水印的话,可以使用PhotoShop,GIMP,轻松水印等软件。也可以选择下面的一些在线图片水印工具:

PicMarkr(详细介绍)(http://parandroid.com/picmarkr-online-add-to-the-picture-watermarking-services/)

WatermarkTool(http://www.watermarktool.com/)

使用水印 (服务器端生成)

使用服务器端自动为图片添加水印,是件省心的事情。只是需要一些脚本知识。

下面是一些相关的各种脚本语言的示例方案:

Asido: PHP Image Processing Library(http://asido.info/)

Asido 是一个PHP图像处理库,可以运行于 GD2, Magick Wand 和 Image Magick.

这里 是 Asido 为图片添加水印的详细说明。

其它PHP 解决方案:

Put watermark on images using PHP(http://www.phpjabbers.com/put-watermark-on-images-using-php-php20.html)

Watermark your images with PHP 5 and GD(http://www.litewebsite.com/| bottom |middle |text-bottom 都可以解决.

13.如何对齐文本与文本输入框 加上 vertical-align:middle; <style type="text/css"> <!-- input { width:200px; height:30px; border:1px solid red; vertical-align:middle; } --> </style>

14.web标准中定义id与class有什么区别吗 一.web标准中是不容许重复ID的,比如 div id="aa" 不容许重复2次,而class 定义的是类,理论上可以无限重复, 这样需要多次引用的定义便可以使用他. 二.属性的优先级问题 ID 的优先级要高于class,看上面的例子三.方便JS等客户端脚本,如果在页面中要对某个对象进行脚本操作,那么可以给他定义一个ID,否则只能利用遍历页面元素加上指定特定属性来找到它,这是相对浪费时间资源,远远不如一个ID来得简单.

15. LI中内容超过长度后以省略号显示的方法 此方法适用与IE与OP浏览器 <style type="text/css"> <!-- li { width:200px; white-space:nowrap; text-overflow:ellipsis; -o-text-overflow:ellipsis; overflow: hidden; } --> </style>

16.为什么web标准中IE无法设置滚动条颜色了 解决办法是将body换成html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <style type="text/css"> <!-- html { scrollbar-face-color:#f6f6f6; scrollbar-highlight-color:#fff; scrollbar-shadow-color:#eeeeee; scrollbar-3dlight-color:#eeeeee; scrollbar-arrow-color:#000; scrollbar-track-color:#fff; scrollbar-darkshadow-color:#fff; } --> </style>

17.为什么无法定义1px左右高度的容器 IE6下这个问题是因为默认的行高造成的,解决的方法也有很多,例如:overflow:hidden | zoom:0.08 | line-height:1px

18.怎么样才能让层显示在FLASH之上呢 解决的办法是给FLASH设置透明 <param name="wmode" value="transparent" />

19.怎样使一个层垂直居中于浏览器中这里我们使用百分比绝对定位,与外补丁负值的方法,负值的大小为其自身宽度高度除以二 <style type="text/css"> <!-- div { position:absolute; top:50%; lef:50%; margin:-100px 0 0 -100px; width:200px; height:200px; border:1px solid red; } --> </style>

FF与IE

1. Div居中问题 div设置 margin-left, margin-right 为 auto 时已经居中,IE 不行,IE需要设定body居中,首先在父级元素定义text-algin: center;这个的意思就是在父级元素内的内容居中。

2.链接(a标签)的边框与背景 a 链接加边框和背景色,需设置 display: block, 同时设置 float: left 保证不换行。参照 menubar, 给 a 和 menubar 设置高度是为了避免底边显示错位, 若不设 height, 可以在 menubar 中插入一个空格。

3.超链接访问过后hover样式就不出现的问题被点击访问过的超链接样式不在具有hover和active了,很多人应该都遇到过这个问题,解决方法是改变CSS属性的排列顺序: L-V-H-A Code: <style type="text/css"> <!-- a:link {} a:visited {} a:hover {} a:active {} --> </style>

4. 游标手指cursor cursor: pointer 可以同时在 IE FF 中显示游标手指状, hand 仅 IE 可以

5.UL的padding与margin ul标签在FF中默认是有padding值的,而在IE中只有margin默认有值,所以先定义 ul{margin:0;padding:0;}就能解决大部分问题

6. FORM标签 这个标签在IE中,将会自动margin一些边距,而在FF中margin则是0,因此,如果想显示一致,所以最好在css中指定margin和 padding,针对上面两个问题,我的css中一般首先都使用这样的样式ul,form{margin:0;padding:0;}给定义死了,所以后面就不会为这个头疼了.

7. BOX模型解释不一致问题 在FF和IE 中的BOX模型解释不一致导致相差2px解决方法:div{margin:30px!important;margin:28px;} 注意这两个 margin的顺序一定不能写反, important这个属性IE不能识别,但别的浏览器可以识别。所以在IE下其实解释成这样: div {maring:30px;margin:28px}重复定义的话按照最后一个来执行,所以不可以只写margin:xx px!important; #box{ width:600px; //for ie6.0- w\idth:500px; //for ff+ie6.0} #box{ width:600px!important //for ff width:600px; //for ff+ie6.0 width /**/:500px; //for ie6.0-}

8.属性选择器(这个不能算是兼容,是隐藏css的一个bug) p[id]{}div[id]{} 这个对于IE6.0和IE6.0以下的版本都隐藏,FF和OPera作用.属性选择器和子选择器还是有区别的,子选择器的范围从形式来说缩小了,属性选择器的范围比较大,如p[id]中,所有p标签中有id的都是同样式的.

9.最狠的手段 - !important; 如果实在没有办法解决一些细节问题,可以用这个方法.FF对于”!important”会自动优先解析,然而IE则会忽略.如下 .tabd1{ background:url(res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/ background:url(res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */} 值得注意的是,一定要将xxxx !important 这句放置在另一句之上,上面已经提过

10.IE,FF的默认值问题 或许你一直在抱怨为什么要专门为IE和FF写不同的CSS,为什么IE这样让人头疼,然后一边写css,一边咒骂那个可恶的M$ IE.其实对于css的标准支持方面,IE并没有我们想象的那么可恶,关键在于IE和FF的默认值不一样而已,掌握了这个技巧,你会发现写出兼容FF和 IE的css并不是那么困难,或许对于简单的css,你完全可以不用”!important”这个东西了。 我们都知道,浏览器在显示网页的时候,都会根据网页的 css样式表来决定如何显示,但是我们在样式表中未必会将所有的元素都进行了具体的描述,当然也没有必要那么做,所以对于那些没有描述的属性,浏览器将采用内置默认的方式来进行显示,譬如文字,如果你没有在css中指定颜色,那么浏览器将采用黑色或者系统颜色来显示,div或者其他元素的背景,如果在 css中没有被指定,浏览器则将其设置为白色或者透明,等等其他未定义的样式均如此。所以有很多东西出现FF和IE显示不一样的根本原因在于它们的默认显示不一样,而这个默认样式该如何显示我知道在w3中有没有对应的标准来进行规定,因此对于这点也就别去怪罪IE了。

11.为什么FF下文本无法撑开容器的高度标准浏览器中固定高度值的容器是不会象IE6里那样被撑开的,那我又想固定高度,又想能被撑开需要怎样设置呢?办法就是去掉height设置min- height:200px; 这里为了照顾不认识min-height的IE6 可以这样定义: { height:auto!important; height:200px; min-height:200px; }

12.FireFox下如何使连续长字段自动换行 众所周知IE中直接使用 word-wrap:break-word 就可以了, FF中我们使用JS插入&#10;的方法来解决 <style type="text/css"> <!-- div { width:300px; word-wrap:break-word; border:1px solid red; } --> </style> <div id="ff">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</div> <scrīpt type="text/javascrīpt"> /* <![CDATA[ */ function toBreakWord(el, intLen){ var ōbj=document.getElementById(el); var strContent=obj.innerHTML; var strTemp=""; while(strContent.length>intLen){ strTemp+=strContent.substr(0,intLen)+"&#10;"; strContent=strContent.substr(intLen,strContent.length); } strTemp+="&#10;"+strContent; obj.innerHTML=strTemp; } if(document.getElementById && !document.all) toBreakWord("ff", 37); /* ]]> */ </scrīpt>

13.为什么IE6下容器的宽度和FF解释不同呢 <?xml version="1.0" encoding="gb2312"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <style type="text/css"> <!-- div { cursor:pointer; width:200px; height:200px; border:10px solid red } --> </style> <div ōnclick="alert(this.offsetWidth)">让FireFox与IE兼容</div> 问题的差别在于容器的整体宽度有没有将边框(border)的宽度算在其内,这里IE6解释为200PX ,而FF则解释为220PX,那究竟是怎么导致的问题呢?大家把容器顶部的xml去掉就会发现原来问题出在这,顶部的申明触发了IE的qurks mode,关于qurks mode、 standards mode的相关知识,请参考:http: //www.microsoft.com/china/msdn/library/webservices/asp.net/ ASPNETusStan.mspx?mfr=true

IE6,IE7,FF IE7.0 出来了,对CSS的支持又有新问题。浏览器多了,网页兼容性更差了,疲于奔命的还是我们 ,为解决IE7.0的兼容问题,找来了下面这篇文章:现在我大部分都是用!important来hack,对于ie6和firefox测试可以正常显示,但是ie7对!important可以正确解释,会导致页面没按要求显示!下面是三个浏览器的兼容性收集.

第一种,是CSS HACK的方法 height:20px; /*For Firefox*/ *height:25px; /*For IE7 & IE6*/ _height:20px; /*For IE6*/ 注意顺序。 这样也属于CSS HACK,不过没有上面这样简洁。 #example { color: #333; } /* Moz */ * html #example { color: #666; } /* IE6 */ *+html #example { color: #999; } /* IE7 */

<!--其他浏览器 --> <link rel="stylesheet" type="text/css" href="css.css" /> <!--[if IE 7]> <!-- 适合于IE7 --> <link rel="stylesheet" type="text/css" href="ie7.css" /> <![endif]--> <!--[if lte IE 6]> <!-- 适合于IE6及一下 --> <link rel="stylesheet" type="text/css" href="ie.css" /> <![endif]-->

第三种,css filter的办法,以下为经典从国外网站翻译过来的。. 新建一个css样式如下: #item { width: 200px; height: 200px; background: red; } 新建一个div,并使用前面定义的css的样式: <div id="item">some text here</div> 在body表现这里加入lang属性,中文为zh: <body lang="en"> 现在对div元素再定义一个样式: *:lang(en) #item{ background:green !important; } 这样做是为了用!important覆盖原来的css样式,由于:lang选择器ie7.0并不支持,所以对这句话不会有任何作用,于是也达到了 ie6.0下同样的效果,但是很不幸地的是,safari同样不支持此属性,所以需要加入以下css样式: #item:empty { background: green !important } :empty选择器为css3的规范,尽管safari并不支持此规范,但是还是会选择此元素,不管是否此元素存在,现在绿色会现在在除ie各版本以外的浏览器上。 对IE6和FF的兼容可以考虑以前的!important 个人比较喜欢用

]]>
程序与优化http://www.zyseo.org/post/cssllqjrwqzq.html#commenthttp://www.zyseo.org/http://www.zyseo.org/feed.asp?cmt=432http://www.zyseo.org/cmd.asp?act=tb&id=432&key=be45ddef
Flash程序优化null@null.com (zyseo)http://www.zyseo.org/post/flashyouhua.htmlMon, 30 Mar 2009 13:06:42 +0800http://www.zyseo.org/post/flashyouhua.html
第一章 AS3的一些优化计算方法

用乘法来代替除法(当除数可转化为有限数的时候)。比如var n:Number = value * 0.5;要比var n:Number = value / 2;快。但差别并不是很大。只有在需要大量计算情况下,比如3D引擎中差别才比较明显。
用位运算代替除2或乘2。比如10>>1要比10*2快,而10<<1要比10*2快。从测试来看位运算几乎比乘除快一倍,但是一般情况下,我们不能选择位运算,比如我们就不能用13>>1来代替13/2,尽管前者比后者运算速度更快,但2者的运算结果却不一样。所以还是要看具体情况。
用unit()或int()代替取整运算Math.floor()和Math.ceil()。比如var test:uint = uint(1.5);要比var test:Number = Math.floor(1.5);快;而var test:uint = uint(1.5)+1;要比var test:Number = Math.ceil(1.5);也快。如果是Math.floor(),还可以用位运算(>>0)来代替。比如var test:uint =1.5>>0,比unit()或int()更快。
用乘-1来代替Math.abs()方法。比如var nn:Number = -23;var test:Number= nn < 0 ? nn * -1 : nn;要比var nn:Number = -23;var test:Number = Math.abs(nn);快。当然还有更多的优化计算的方法。一般来说,低级运算要比高级运算速度;内部方法比调用其他方法速度快。另外要注意的是,这些方法有的时候可能并一定适用。
第二章 Actionscript 优化指南

在这篇文章中,我们将讨论多种优化 Actionscript 代码的方法.此外我们也针对一些典型的游戏代码进行了系列测试,来最大限度的发掘、提高Flash播放器的性能。何时进行优化对现有程序进行优化的过程,有时十分的冗长与困难,这与原始代码的非优化程度有关,所以在投入大量时间进行代码优化之前,最重要的是要估计出要在什么地方对代码做出修改或替换。

一个游戏代码的最重要的部分就是主循环体,通常情况下该循环体要在flash的每一帧上执行,并控制游戏中的角色属性和重要的数据参数。而对于主循环体以外的部分,也可能是次要循环部分,同样要注意是给其否分配了过多的资源,而没有分配给那些更需要资源的核心部分。
通过积累在各处节约出来的时间(可能每处仅仅是几个毫秒),您会明显发现自己的swf运行得更加稳定,并且游戏感也大大加强。

简洁与高效的代码

书写出十分简洁、可以再次调用的代码(有时可能是面向对象的)是一项精细的工作,但这需要多年的编程经验。对于OOP(object oriented programming,面向对象的程序设计),有些场合根本利用不到它的优势,这使得它显得十分奢侈。在有限的资源条件下(可能是flash播放器的原因),通过更先进的方法,像刚刚提到的OOP,就可能反而导致令人不满意的结果。

我们并不是说OOP对游戏编程不好,只是在某些场合它显得过于奢侈和多余。毕竟有时候“传统的方法”却能得到更好的结果。大体而言,用OOP是比较好的,因为它让代码维护更加简单。但在后文中,你会看到有时为了充分发挥flashplayer性能,而不采用OOP技术。例如:处理快速滚动或者计算十分复杂的数学问题。基本的优化一提及代码优化,我们马上会联想到执行速度的改进,而很少去考虑系统资源的分配。这是因为当今,即使是将被淘汰的计算机,都有足够的内存来运行我们大部分的flash游戏(128M的内存足以满足大多数情况的需要,况且,512M的内存是当今新电脑的基本配置)

变量

在各种重要的代码优化手段中,有这么一条:在定义局部变量的时候,一定要用关键字var来定义,因为在Flash播放器中,局部变量的运行速度更快,而且在他们的作用域外是不耗占系统资源的。

aw附:var变量仅仅在花括号对中才有“生命”,个人认为没有系统学过编程的人容易出错的一个地方:


awMC.onLoad = function(){
var aw = 1;
}
awMC.onEnterFrame = function(){
//不存在aw这个变量
}
一段非优化代码:
function doSomething()
{
mx = 100
my = 100
ar = new Array()

for (y=0; y < my; y++)
{
for (x=0; x < mx; x++)
{
i = (y * mx) + x
arr[i] = i 
}
}
return arr
}

这段代码中,并未声明函数体内的那些变量(那些仅仅在函数内使用的变量)为局部变量,这使得这些变量被播放器调用的速度更慢,并且在函数执行完毕的时候仍然耗占系统资源。

下面列出的是经过改进的同样功能的代码:


function doSomething()
{
var mx = 100
var my = 100
var ar = new Array()

for (var y=0; y < my; y++)
{
for (var x=0; x < mx; x++)
{
var i = (y * mx) + x
arr[i] = i
}
}
return arr
}

这样一来所有的变量均被定义为了局部变量,他们能够更快地被播放器调用。这一点在函数大量(10,000次)循环运行时显得尤为重要!当一个函数调用结束的时候,相应的局部变量都会被销毁,并且释放出他们占有的系统资源。
onEnterFrame 事件

onEnterFrame事件对于游戏开发者而言是非常有用的,它使得我们能够快速、反复地按照预设帧频(fps)运行一段程序。回想在Flash5的时代,这(onEnterFrame实时监控)是一种非常流行的技术,用这样的事件来控制机器游戏对手的逻辑,又或者我们可以在每一个子弹上设置这样的事件来监测子弹的碰撞。

实际上,我们并不推荐给过多的MoveClip添加这样的事件,因为这样做会导致“无头绪码(spaghetti code)”的出现,并且容易导致程序效率明显降低。

大多数情况下,用单独一个onEnterFrame事件就可以解决问题了:用这一个主循环来执行你所需要的操作。

另一个简单的办法是设置一个合适的帧频:要知道帧频越高,CPU资源就越紧张。在帧频为25-35(fps)之间时,onEnterFrame足以很好地执行较复杂代码,哪怕你的计算机配置较低。因此,在没有特殊要求的场合,我们不推荐使用高于60(fps)的帧频。

矢量图与位图

在处理图形前,我们一定要做出正确的选择。Flash能对矢量图和位图进行完美的兼容,然而矢量图和位图在播放器中的表现实质却完全不同。在用到矢量图的时候,我们要尽可能简化它们的形状,去除多余的端点。这样做将大大降低播放器用于呈现矢量图所要进行的计算量。另一个重要方面在于线条的运用,尽量减少和避免冗陈的线条结构,因为它们会直接影响到flash的播放效率。

当某个实例透明度小于100时,也会对播放速率造成影响,所以如果你发现自己的Flash播放速率过慢,就去挑出这些透明的实例来吧!

那么,如果真的需要呈现比较复杂的场景时,你就最好考虑使用位图实现。虽然Flash在对位图的渲染效率上并不是最优越的(比如和Flash的“兄长”Director比起来),但丰富的视觉内容呈现只能靠位图(与位图同复杂度的矢量图形渲染速率非常低)了,这也是很多基于区块的游戏中广泛采用像素图作为背景的原因。顺便要提到的是,Flash虽然对GIF,JPG和PNG都有所支持,但是渲染速度上PNG还是占有绝对优势,所

以我们建议flash中的位图都尽可能采用PNG格式。

影片剪辑(MovieClip)的可视性[下面将MovieClip简称为mc]

您可能会经常碰到这样一种情况:有大量不可见/屏幕外的mc等待出场(比如游戏中屏幕外的地图、人物等等)。
要知道,播放器仍然要消耗一定的资源来处理这些不可见/屏幕外的mc,哪怕他们是单帧,非播放的状态。

最好的解决办法之一是给这些mc一个空白帧,当他们不出现在屏幕上时,你能用gotoAndStop()语句跳转到这一帧,从而减少播放器对资源的需求。

请务必记住,这种情况下,简单的设置可见度属性为不可见( _visible = false )是无效的,播放器将继续按照这些mc所停留或播放的帧的复杂度来分配资源。

数组

数组在各种需要记录数据的应用程序和游戏中都被广泛的使用。

一个典型的例子就是基于区块的Flash游戏,在这样一类的游戏中,地图有时被存放成形如arr[y][x]的二维数组。虽然这是一种很常见的方法,但是如果用一维数组的话,却能提高程序的运行效率。另一个重要的方法来提高数组效率是在数组遍历的时候使用for in 循环来代替传统的 for 或者while循环语法。

例如:

一段代码如下

for (var i in arr)
{
if (arr[i] > 50)
{
// 进行某些操作
}
}
它的执行速度明显高于这一段代码:

for (var i=0; i < 10000; i++)
{
if (arr[i] > 50)
{
// 进行某些操作
}
}
前者的效率比后者提高了30%,这个数字在你的游戏要逐帧执行这一段代码的时候显得更加宝贵!
高级优化:

1) for循环 和 while循环
用while循环将会得到比for循环更好的效率。然而,从数组中读取数据,用for in循环式最好的选择!

所以我们不推荐使用:

for (var i=0; i < 1000; i++)
{
//进行某些操作
}而推荐使用
var i=-1
while (++i < 1000)
{
//进行某些操作
}
2) 从数组中读取数据
我们通过测试发现,for in循环的效率大大高于其他的循环方式。参看:

arr = []
MAX = 5000
//数组赋值
for (i=0; i < MAX; i++)
{
arr[i] = i
}
var item = null
// For 循环
for (var i=0; i < MAX; i++)
{
item = arr[i]
}
// For 循环
for (var i in arr)
{
item = arr[i]
}
// While 循环
i = -1
while(++i < MAX)
{
item = arr[i]
}
3) 向数组中写入数据(while , for)可以看到while循环稍占优势。

4) _global(全局)变量同Timeline(时间轴)变量
我们猜测采用全局变量能提高变量调用速度,然而效果并不像预计的那样明显。

5) 单行、多行变量赋值
我们发现单行变量赋值效率大大高于多行。比如:

a = 0
b = 0
c = 0
d = 100
e = 100
效率就不如:

a = b = c = 0
d = e = 100
6) 变量名寻址
这个测试反映了变量名的预寻址是非常重要的,尤其是在循环的时候,一定要先给丁一个指向。这样大大节约了寻址时间。

比如:

var num = null
t = getTimer()
for (var i=0; i < MAX; i++)
{
num = Math.floor(MAX) - Math.ceil(MAX)
}
t1.text = "Always lookup: " + (getTimer() - t)
就不如:

t = getTimer()
var floor = Math.floor
var ceil = Math.ceil
for (var i=0; i < MAX; i++)
{
num = floor(MAX) - ceil(MAX)
}
7) 短变量名和长变量名
变量名越短,效率越高。考虑到长变量名也有它的好处(比如,便于维护等),因此建议在关键部位(比如大量循环出现的时候)使用短变量名,最好就1-2个字符。

8) 循环前、后声明变量
在测试前,我们认为循环前声明变量会更加节约时间,不料测试结果并不明显,甚至还恰恰相反!

// 内部声明
t = getTimer()
for (var i=0; i < MAX; i++)
{
var test1 = i
}
t1.text = "Inside:" + (getTimer() - t)
// 外部声明
t = getTimer()
var test2
for (var i=0; i < MAX; i++)
{
test2 = i
}
9) 使用嵌套的if结构
当用到复杂的条件表达式时。把他们打散成为嵌套的独立判断结构是最佳方案。下面的代码我们进行了测试,发现这种效果改进明显!

MAX = 20000
a = 1
b = 2
c = -3
d = 4
var i=MAX
while(--i > -1)
{
if (a == 1 && b == 2 && c == 3 && d == 4)
{
var k = d * c * b * a
}
}
//下面的判断更加节省时间
var i=MAX
while(--i > -1)
{
if (a == 1)
{
if (b == 2)
{
if (c == 3)
{
if (d == 4)
{
var k = d * c * b * a
}
}
}
}
}
10) 寻找局部变量(this方法同with方法比较)
局部变量的定位方法很多。我们发现用with比用this更加有优势!

obj = {}
obj.a = 1
obj.b = 2
obj.c = 3
obj.d = 4
obj.e = 5
obj.f = 6
obj.g = 7
obj.h = 8
obj.test1 = useThis
obj.test2 = useWith
MAX = 10000
function useThis()
{
var i = MAX
while(--i > -1)
{
this.a = 1
this.b = 2
this.c = 3
this.d = 4
this.e = 5
this.f = 6
this.g = 7
this.h = 8
}
}
function useWith()
{
var i = MAX
while(--i > -1)
{
with(this)
{
a = 1
b = 2
c = 3
d = 4
e = 5
f = 6
g = 7
h = 8
}
}
}
11) 循环监听键盘事件
同刚才所提到的寻址一样,我们实现给一个指向会得到更好的效率,比如:

keyDown = Key.isDown
keyLeft = Key.LEFT

//我们再用 if (keyDown(keyLeft))
附:我们测试了按键代码和键值常量的效率发现并无太大差别。

12) Math.floor()方法与int()
这个问题曾在Flashkit的论坛被提出讨论过。测试表明,旧的int方法反而效率更高。我们的测试结果也反映了这一点。

13)eval表达式与中括号语法
我们并没有发现明显的差别,并不像刚才所述那样,旧的eval表达式比起中括号方法并没有太大的优势
var mc = eval("_root.myMc" + i)
var mc = _root["myMc" + i]
//两者效率差不多16) 涉及MC的循环:ASBroadcaster 同欢同循环的差别

结论

我们从这些测试结果中发现,对于不同的需求,采用不同的代码,我们可以大大提高脚本的执行效率。虽然我们在这里罗列了许多的优化代码的方法,需要大家自己测试、实验的还有很多(考虑到每个人的需求不同).如果你想更加深入地讨论这类问题。可以来我们的论坛。

aw附:
终于翻译完了,自己也学到很多好东西,大家又什么问题可以去gotoAndPlay的官方,也可以来我的Blog提出!

第三章 黑羽AS心得:浅释ActionScript的代码优化

本机函数要比用户定义的函数运行速度更快。本机函数即Flash中内有的一些函数(intrinsic),比如hitTest(),你没必要自己写一个类似的。

3.不要过多使用 Object 类型。
数据类型注释应力求精确,这样可以提高性能。只有在没有适当的备选数据类型时,才使用 Object 类型。同时也便于代码管理,时刻知道对象的类型和作用。同时也有利于编译器编译时优化。

4.避免使用 eval() 函数或数据访问运算符。
通常,较为可取且更有效的做法是只设置一次局部引用。不得已时才用eval,比如转换_droptarget为MovieClip时。

5.在开始循环前将 Array.length 赋予变量,尤其是大的循环。
在开始循环前将 Array.length 赋予变量(比如var iLength:Number),将其作为条件使用,而不是使用myArr.length 本身。
原因,在循环中,iLength是Number变量,会被放入寄存器使用,效率远比访问Array再得到length高。例如,应使用

var fontArr:Array = TextField.getFontList();
var arrayLen:Number = fontArr.length;
for (var i:Number = 0; i < arrayLen; i++) {
trace(fontArr[i]);
}
来代替:

var fontArr:Array = TextField.getFontList();
for (var i:Number = 0; i < fontArr.length; i++) {
trace(fontArr[i]);
}
6.注重优化循环及所有重复动作。
Flash Player 花费许多时间来处理循环(如使用 setInterval() 函数的循环)。

7.在局部变量够用时,不要使用全局变量。类静态变量也要少用。
全局变量是开发者的恶梦。实在需要全局变量的话,我建议使用singleton设计模式来进行管理。

8.声明变量时,添加 var 关键字。
这是为了编译时让编译器知道你的变量类型,优化编译。

黑羽补充一点:对关键字的使用要谨慎。
不赞成使用关键字作为自己的method和属性名,除非你确认后续开发不会用到相同的事件名和属性名。
但你怎么知道flash使用了多少隐藏关键字?太多了!比如说 className, invalidate, refresh, mouseOver等等不常用的关键词。好的方法是使用SEPY编辑器来写代码,那里面加亮了所有公布的和没有公布的关键词。而且因为很有可能和start,load,等这些常用的事件名重复,带来代码不必要的修改和麻烦。

9.对涉及到调用绘图资源的函数时,尽量先多判断再调用。
所有渐变,位置变化,创建删除MC,组件等函数都涉及到绘图资源的调用。在很多情况下,尽量先用逻辑判断变量或者对象的属性,必要时再调用这些函数。这样可以节省较多的计算资源。

]]>
程序与优化http://www.zyseo.org/post/flashyouhua.html#commenthttp://www.zyseo.org/http://www.zyseo.org/feed.asp?cmt=428http://www.zyseo.org/cmd.asp?act=tb&id=428&key=39a6f28b
网站设计中需要注意的细节null@null.com (zyseo)http://www.zyseo.org/post/46sjxj.htmlWed, 25 Feb 2009 13:09:46 +0800http://www.zyseo.org/post/46sjxj.html1. 用户必须在几秒钟知道网站是做什么的。注意力是因特网上最有价值的货币。 如果访问者无法在几秒钟之内得知你的网站的方向,他很有可能转而访问其他网站。 你必须迅速地告诉访问者为什么要在你的网站上花费时间。

2. 让网站易于速读。因特网不是书,因此没必要使用大段的文字。 也许我访问你的网站时我正在忙于其他工作,我不得不迅速读完所有内容。 项目符号、标题、副标题、列表,这些都能帮助读者迅速找到他想要的内容。

3. 不要使用难于阅读的花哨字体。当然,某些字体可以让网站精彩纷呈。 不过它们容易阅读吗?如果你的主要目的是传递信息并让读者阅读, 你应该让阅读过程舒服些。

4. 不要用小字体。如上一条所述,你得让读者阅读时感到舒服。 虽然我的Firefox有放大功能,但如果必须放大才能看清一个网站的话, 我就再也不会去访问它了。

5. 不要打开新浏览器窗口。我的第一个网站曾经经常这么做。 原因很简单,在新窗口中打开外部链接,用户就不必离开我的网站。 错!让用户决定如何打开链接,否则浏览器上大大的后退按钮就没必要存在了。 不用担心用户离开你的网站,在必要的时候他们会回来的。

6. 不要改变用户的浏览器窗口大小。用户有权控制自己的浏览器。 如果你改变窗口大小,你会在他们面前失去信用。

7. 不必要时不要让用户注册。直白地讲,我上网是为了获取信息,不是为了别的。 不要强迫我注册并留下我的电子邮件以及其他信息,除非特别必要(比如你 能提供的消息非常有价值)。

8. 不要在未经访问者同意的情况下为他们订阅电子杂志。 不要在访问者注册时自动给他们订阅电子杂志。 不请自来的邮件可不是个交朋友的好办法。

9. 不要过多使用Flash。Flash不仅会增加网站的读取时间, 过度使用甚至会让访问者感到不快。只有当静态页面无法表达你的意图时 才使用Flash。

10. 不要播放音乐。早些年Web开发者都喜欢在网站中集成音乐,结果他们失败了。 记住,永远不要使用音乐。

11. 当你必须使用声音时,让用户启动它。有时你必须使用声音文件, 比如你要给用户发送一份演讲,或者你的教程包含声音。这没问题,但要让用户来控制, 让用户点击“播放”按钮,别在打开网页的瞬间播放声音。

12. 不要让标志弄乱你的网站。社交网络和社区的标志会让你的网站看起来十分不专业。 就算是奖章和荣誉等标志也应当放到“关于我们”页面上。

13. 不要使用“点击进入”页面。用户访问到内容的步骤越少越好。

14. 注意要留下联系方式。最差的莫过于网站没有留下联系方式的了。 不仅对访问者不友好,而且对你也没好处,你会错过珍贵的反馈信息。

15. 不要影响“后退”按钮的动作。这是网站可用性的最基本的理念。 在任何情况下都不能影响“后退”按钮的动作。比如,打开新窗口会破坏它, 某些Javascript链接也会破坏它。

16. 不要用闪烁的文字。除非你的访问者来自1996年,否则别用闪烁文字。

17. 避免复杂的URL结构。一个简单的基于关键字的URL结构不仅能提高你的搜索引擎排名, 还能让访问者在访问之前了解网页内容。

18. 用CSS布局,不要使用表格。HTML表格曾经被用于页面布局, 但没有必要拘泥于此,尤其是在CSS诞生之后。CSS更快、更稳定, 并能提供更多的特性。
 

19. 保证用户可以搜索整个网站。搜索引擎带来因特网革命的原因,就是 它使得信息查找变得十分容易。别在你的网站上唱反调。

20. 避免使用下拉菜单。用户应当直观地看到所有导航选项。 下拉菜单会造成混乱,并且会隐藏访问者真正要找的信息。

21. 使用文字做导航栏。文字导航不仅速度快,而且更稳定。 例如,有些用户上网时会关闭图片。

22. 如果需要链接到PDF文档,一定要注明。你一定有过点击链接之后, 浏览器就像死掉一样等待Acrobat Reader启动,只为了打开一个(你不想看的)PDF? 这是个不小的麻烦,因此一定要在指向PDF的链接旁特别说明,使用户可以采取相应措施。

23. 不要用多种版本让访问者迷惑。你想用哪种带宽?56Kbps?128Kbps?Flash版还是HTML版? 嗨,我只想快点看到内容!

24. 不要在内容中混合广告。在内容中混合广告(如Adsense)也许会增加短期内的广告点击率, 但从长远角度来看,这会减少网站的人气。愤怒的用户会离开的。

25. 使用简单的导航结构。过犹不及。这个规则通常适用于人和选择上。 确保你的网站的导航结构单纯简洁。你不想让用户在查找信息时遇到麻烦吧?

26. 避免内容介绍。别强迫用户在访问到真正内容之前看某些东西。 这很令人愤怒,除非你提供的信息是用户必须的,否则他不会等下去。

27. 不要使用FrontPage。这一点也适用于其他廉价的HTML编辑器。 它们让页面设计变得更方便,但其输出结果将会非常低级,不兼容不同的浏览器, 并且会包含错误。

28. 保证你的网站兼容大部分浏览器。浏览器并不完全相同,在解释CSS和其他 语言的方法也相差甚远。不管你是否愿意,你应当让网站兼容市面上的常用浏览器, 否则你会永远地失去部分读者。

29. 保证在链接上添加有意义的文字。以前我经常犯这个错误。告诉人们“点击这里”很容易, 但这没有效果。要保证链接文字有意义。它使得访问者知道点击链接之后将出现什么, 也能为链接指向的外部站点带来效果。

30. 不要在状态栏中隐藏链接。用户还必须能在状态栏中看到链接指向哪里。 如果你隐藏了链接(即使是由于其他原因),那么你也会丧失信誉。

31. 使链接可见。访问者应能轻易识别出哪些能点击,哪些不能。 确保链接的颜色有强烈的对比(标准的蓝色通常是最好的)。可能的话, 最好加上下划线。

32. 不要在普通文本上添加下划线或者颜色。除非特别需要,否则不要为普通文字添加下划线。 就像用户需要识别哪些能点击一样,他们不应当将本不能点击的文字误认为能够点击。

33. 改变访问过的链接的颜色。这一点对于提高网站可用性非常重要。 改变访问过的链接颜色有助于用户在网站中定位,确保他们不会不经意地 访问同一页面两次。

34. 不要使用动态GIF。除非你有需要动画的广告条,否则避免使用动态GIF。 它会使网站看上去很业余,并且会分散访问者的注意力。

35. 给图像添加ALT和TITLE属性。ALT和TITLE不仅会带来SEO效果,而且 对盲人有很大帮助。

36. 不要用令人不快的颜色。如果用户连续阅读10分钟后觉得头疼, 那么你最好选择别的配色方案。根据你的目的决定设计(例如,创造一种氛围 使得用户将注意力放在网站内容上,等等)。
 

37. 不要弹出窗口。这一点涉及任何种类的弹出窗口。即使用户要求使用, 弹出窗口也不宜使用,因为它会被弹出窗口拦截功能阻拦。

38. 不要使用Javascript做链接。远离那些点击之后执行一小段Javascript的链接, 它们经常给用户带来麻烦。

39. 在页面底部放置有意义的链接。访问者在找不到所需信息时通常会滚动到页面最底端。 作为最后的手段,你应当在页面底部放一个“联系我们”页面的链接。

40. 避免网页过长。如果用户老是需要滚动才能看到内容,他通常会采取的做法是 跳过它们。如果你的网站正好如此,那么应当缩短内容并优化导航结构。

41. 禁止使用水平滚动条。虽然垂直滚动条可以接受,但水平滚动条却远非如此。 现在的流行分辨率是1024×768,要确保网站能容纳在其中。

42. 禁止出现拼写或语法错误。这不是网站设计的错,但却是影响网站整体质量的重要因素。 确保链接和文字中没有拼写或语法错误。

43. 如果你使用图片认证,要保证能看清其字符。有些网站将图片认证作为对抗垃圾评论的方法, 或是在注册表单上使用。其中有个问题就是,用户经常需要叫上全家人来讨论图片上到底是什么字母。

]]>
程序与优化http://www.zyseo.org/post/46sjxj.html#commenthttp://www.zyseo.org/http://www.zyseo.org/feed.asp?cmt=420http://www.zyseo.org/cmd.asp?act=tb&id=420&key=f8e02029
em替代px轻松改变IE字体大小null@null.com (zyseo)http://www.zyseo.org/post/tiaozhengIEdx.htmlWed, 11 Feb 2009 12:43:34 +0800http://www.zyseo.org/post/tiaozhengIEdx.html通常12px作为网站的主要字体大小。10px太小,眼睛很容易疲劳,14px虽容易看清,却破坏页面的美感。唯独12px在审美和视力方面都恰到好处。


对于那些视力下降明显的中年以上的人来讲12px偏小了几乎等于10px。在“查看”里调整“文字大小”就可以了。但是却发现这是徒劳的。在Firefox能轻易调整的字体大小,怎么在IE就变得如此”坚不可调“?

问题出在哪?

又试着打开中国的三大门户—新浪,网易,搜狐。它们的字体无一例外的在IE里失去可调性。看来这不是我网站独有的毛病。再看看MSN,Google,A list apart,华盛顿邮报,在IE里却是可调的。难道IE在字体调整上也搞歧视不成?
困扰我的问题直到看到这篇大作:How to size text using ems,才得到彻底的解决。
关键点:

1. IE无法调整那些使用px作为单位的字体大小;
2. 国外的大部分网站能够调整的原因在于其使用了em作为字体单位;
3. Firefox能够调整px和em,但是96%以上的中国网民使用IE浏览器(或内核)。这意味这中国网站的字体大小可以被认为不可调。

95%的中国网站需要重写CSS
在我所观察的中国网站中,包括三大门户,以及“引领”中国网站设计潮流的蓝色理想,ChinaUI等都是使用了px作为字体单位。只有百度好歹做了个可调的表率。
而在大洋彼岸,几乎所有的主流站点都使用em作为字体单位,也就是可调的。
没错,px比em更加容易使用,我也敢打赌大部分读者不知道em为何物或者它相当于多少px。

国外人士如此重视网站易用性(Accessibility),不仅因为其根生蒂固的人文精神,直接原因可能是因为有一部法律来约束他们—例如美国的Section 508,强制网站达到一定的易用性。所以没有哪个主流站点愿意被那些视力下降或是残缺的人告上法庭。
注: 在中国, 可能把微软告上法庭来的更简单点,为什么IE对于px那么死板。

如何重写你的网站CSS
Jorux.com作为一个对视力下降人士负责任的站点,已经重写了CSS的Font-size部分。在这里,Jorux和各个有人文精神的网站主讨论如何用em重写Font-szie的问题。

em vs. px

em是何物?

em指字体高,任意浏览器的默认字体高都是16px。所以未经调整的浏览器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em。为了简化font-size的换算,需要在css中的body选择器中声明Font-size=62.5%,这就使em值变为16px*62.5%=10px, 这样12px=1.2em, 10px=1em, 也就是说只需要将你的原来的px数值除以10,然后换上em作为单位就行了。em有如下特点:

1. em的值并不是固定的;
2. em会继承父级元素的字体大小。

重写步骤:

1. body选择器中声明Font-size=62.5%;

2. 将你的原来的px数值除以10,然后换上em作为单位;

简单吧,如果只需要以上两步就能解决问题的话,可能就没人用px了。经过以上两步,你会发现你的网站字体大得出乎想象。因为em的值不固定,又会继承父级元素的大小,你可能会在content这个div里把字体大小设为1.2em, 也就是12px。然后你又把选择器p的字体大小也设为1.2em,但如果p属于content的子级的话,p的字体大小就不是12px,而是1.2em=1.2 * 12px=14.4px。这是因为content的字体大小被设为1.2em,这个em值继承其父级元素body的大小,也就是16px * 62.5% * 1.2=12px, 而p作为其子级,em则继承content的字体高,也就是12px。所以p的1.2em就不再是12px,而是14.4px。

3. 重新计算那些被放大的字体的em数值。避免字体大小的重复声明,也就是避免以上提到的1.2 * 1.2= 1.44的现象。比如说你在#content中声明了字体大小为1.2em,那么在声明p的字体大小时就只能是1em,而不是1.2em, 因为此em非彼em,它因继承#content的字体高而变为了1em=12px。

诡异的12px汉字(原因待查)
本人在完成em转换时还发现了一个诡异的现象,就是由以上方法得到的12px(1.2em)大小的汉字在IE中并不等于直接用12px定义的字体大小,而是稍大一点。这个问题我已经解决,你只需在body选择器中把62.5%换成63%就能正常显示了。原因可能是IE处理汉字时,对于浮点的取值精确度有限。阅读本篇的读者还有其他解释吗?

本现象只发生在12px的汉字,英文不存在此现象。你可以在这里下载到此表现此现象的文件。下载后请读者用IE打开sample.htm, 可以看到第一段文字明显长于第二段。然后你可以用编辑器打开style.css,看看究竟发生了什么。解决方法就是把style.css中的62.5%换为63%。

]]>
程序与优化http://www.zyseo.org/post/tiaozhengIEdx.html#commenthttp://www.zyseo.org/http://www.zyseo.org/feed.asp?cmt=417http://www.zyseo.org/cmd.asp?act=tb&id=417&key=528ffe91
J2ME程序优化方法二十条null@null.com (zyseo)http://www.zyseo.org/post/J2ME.htmlFri, 26 Dec 2008 13:04:01 +0800http://www.zyseo.org/post/J2ME.htmlJ2me程序由于其特殊的运行环境限制,所以优化就显得比较重要,以下所收集的一些技巧希望对学习J2me程序朋友有所帮助。

本文主要是说明j2me平台上的特殊优化方法,与j2se重复的一些技巧就不再赘述了。 1.显示图象时确定好你的fps,最好先做几次小实验,这样能让你在显示效果和运行速度上有比较好的平衡。

2.GamaCanvas.getGraphics()每次都会产生一个全新的对象,但是对这些对象的操作都是对同一个graphics,所以还是只取一次供后面使用。

3.让多个对象使用同样的jiantingqi,比如让主MIDlet类实现CommandListener和ItemStateListener接口。

4.考虑使用手机开发商提供的一些sdk,没人会比他们更了解他们手机,所以有些时候能显著提高速度,特别是图片,视频使用方面。

5.使用监视工具分析MIDlet的瓶颈,wtk和各个公司提供的开发包里都会有,可以找到程序的弱点。如果是在手机上,用timer测试你认为有可以的地方。

6.使用System.gc(),在无线程阻塞的情况下可以有效的缓解内存压力,但是有些公司不是太推荐使用(如nokia).sun的说法也是越低端的机子执行的越慢,总之,慎用吧。

7.用固定的数组代替使用Vector。

8.图片的优化。考虑使用设备的规格,可能高分辨率的图片不一定显示的出来。

9.不用的对象赋值为null,为更快的回收

10.用混淆器处理你的类文件,防止反编译,还有一个好的副作用就是它减小class文件的大小,因为混淆器往往用较短的字符串代替原来的变
量或方法名。

11.若数据太大,可以将数据编码为字符串,运行时解码,或把数据存为二进制文件并与程序打包,用类装载器的getResourceAsStream方法在运行时存取。

12.使用现有的类,比如你使用了GameCanvas,就不用自己生成off-screen,另外像CLDC的profile没有构造集合类,所以我们可以用内建的Hashtable和Vector类来实现。

13.用优化软件jPresto---没用过,不过暂且写上吧。
如果对文件大小,内存限制非常严格,这时候就只能用一些非常规的方法了,可能这些方法背离了OO思想,但是多数情况下,它是起到了非常积极的作用的(但是也可能),假如你更在意于程序的维护和扩展方面,我建议你还是跳过吧 -_-

14.把所有资源文件做成一个数据文件。

15.把所有的小图片文件做成一个文件,在运行时再"切割"开。

16.使用有限的面向对象,因为纯粹的OO往往意味着更多的虚方法,更多的层次关系,更多的class

17.生成尽可能少的class,class都有一定的系统开销。

18.class中生成尽可能少的方法。速度比较:同步方法《接口方法《实例方法《final方法《静态方法。

19.用final static限定方法可以获得小幅的速度提高。

20.对数据成员用public限定,来代替get和set方法,不过要注意安全性。

J2ME优化可能使你的程序在不同的模拟器,不同的设备下有不同的运行效果,所以 优化一定要建立在开发设备的规格上。
以上所列举的方法不一定在所有midp设备上都起作用,也不一定都适合每一个程序,总之,应该根据自身的情况

]]>
程序与优化http://www.zyseo.org/post/J2ME.html#commenthttp://www.zyseo.org/http://www.zyseo.org/feed.asp?cmt=406http://www.zyseo.org/cmd.asp?act=tb&id=406&key=1e929493
关于网页跳转代码null@null.com (zyseo)http://www.zyseo.org/post/wytzdm.htmlTue, 16 Dec 2008 13:08:02 +0800http://www.zyseo.org/post/wytzdm.html网页跳转的目的本来很简单,就是当用户或系统需要时从一个页面转向另一个页面,跳转时的HTTP的状态码一般为200,301,302中的一个,下面先列出各状态码出现的情况,然后再解释各状态码有什么不同:
200 正常状态,未发生任何事,普通页面浏览一般都是200 
301 永久性转移(Permanently Moved),SEO必用的招式,会把旧页面的PR等信息转移到新页面 
302 暂时性转移(Temporarily Moved),很常用的招式,也是SEO最容易被判作弊的方式 

状态码200的跳转:
1. <meta http-equiv="refresh" content="3; URL=default.aspx" />
2. Server.Transfer("default.aspx");
3. URLRewrite--严格来说,这个不算是跳转,只是一种URL“欺骗”
4. <a>--不知道我把这个标签也列为一种跳转会不会有人有意见 

状态302的跳转:
Response.Redirect("default.aspx"); 

状态301和的跳转: Response.Status = "301 Moved Permanently";
Response.AddHeader("Location", http://www.zyseo.cn); 

对于用户来说,各个跳转都差不很多,都可以达到目的。但对于来说,这些差得很远,状态200第三条使用合适对SEO有很大好处,但状态200的第一条和状态302却基本没有一点益处,然后很可惜,302跳转被用到了满大街。

很久很久以前,那时候搜索引擎还很傻,好多人利用meta refresh来获得强大的SEO效果,后来直接被搜索引擎给干掉了。再后有很多人开始用302做跳板,后来也被干掉了,比如那两个著名的案例:Business.com和BMW。欺骗搜索引擎,后果很严重。所以现在很少有人在跳转上做SEO,但是有些不可避免的跳转还是要继续存在着,如何防止这些跳转起到负面影响呢?于是有人研究了301跳转。

顺便提下那个404,好多网站在出错时都会有一个自定义的错误页面,但很可惜也有很多人忘记了这个状态码,直接搞个错误页面一般都还是200,搜索引擎会收录这个页面,但很多不同URL的404都跳转到这一个页面时,会被认为大量重复页,最惨的就是404太多了,被认为站内无效、重复内容过多,所以做自定义错误页面时一定记得返回个404回去。

]]>
程序与优化http://www.zyseo.org/post/wytzdm.html#commenthttp://www.zyseo.org/http://www.zyseo.org/feed.asp?cmt=400http://www.zyseo.org/cmd.asp?act=tb&id=400&key=f6075692
网站几种静态化及代码优化方法null@null.com (zyseo)http://www.zyseo.org/post/jingtaiyouhuadm.htmlWed, 19 Nov 2008 16:58:12 +0800http://www.zyseo.org/post/jingtaiyouhuadm.html几种静态化方法:
1. 使用IIS_ReWrite 静态化处理,适合PHP、ASP、ASP.NET 程序。
A. isapi_rewrite.isapi_rewrite分精简(lite)和完全(full)版.精简版不支持对每个虚拟主机站点进行
重写,只能进行全局处理,精简版下载地址ISAPI_Rewrite 2.7 For IIS 。
B. 打开IIS,选择网站,右键菜单属性,添加过滤器。
C. 打开文件:开始菜单->程序->Helicon->ISAPI_Rewrite->httpd.ini
D. 将RewriteRule /user/(\d+).htm /user.asp\?id=$1 [I,O] 加入内容中。
E. 在浏览器地址栏输入:/user/1.htm 页面将指向/user.asp?id=1。

2. 使用虚拟主机的ASP 网站,需要使用404 错误操作实现静态化。
A. 下载404 处理页面。404_Rewrite_GB2312.rar
B. 解压后将Rewrite.asp、error.asp 放在网站的根目录。
C. 设置网站自定义错误信息如图:
D. 在error.asp 里添加处理命令:
Call ParaseUrl("/(\d+).htm","/user.asp?User=$1")
E. 在需要静态化的实例user.asp 页面中添加代码:
<!-- #include virtual="/rewrite.asp" --> 引用文件
<%
response.write "<li>Para=" & session("Para") ‘变量是通过Session 传递
‘原来使用request(“user”)获得参数的命令,需要修改成request_(“user”)调用
response.write "<li>request_(""User"")=" & request_("User")
‘原用request.querystring (“user”)获得参数命令,修改为request__.querystring (“user”)调用
response.write "<li>request__.querystring(""User"")=" & request__.querystring("User")
%>
F. 在地址栏输入/1.htm ,实际调用/user.asp?user=1

3. 使用asp.net 开发的网页程序,使用URLRewriter.dll 实现静态化。
A. 下载URLRewriter.rar,解压后放在/bin/目录下
B. 将URLRewriter.rar 加入工程引用。
C. 配置IIS 站点,将扩展名为html 指向处理程序aspnet_isapi.dll。
IIS 站点->属性->主目录->配置->添加
可执行文件和aspx 处理相同,都是 c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll
特别注意,一定不要选择检查文件是否存在。
D. 在web.config 中添加配置内容,压缩包里有。
<configSections>
<section name="RewriterConfig"
type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
<!-- 实际重定向-->
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/(\d*).html</LookFor>
<SendTo>~/user/default.aspx?link=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
<system.web>
<!--
需要在IIS 里面增加html 引用,改成aspx 的引用
-->
<httpHandlers>
<add verb="*" path="*.aspx"
type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
<add verb="*" path="*.html"
type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
</httpHandlers>
E. 在地址栏输入http://localhost/1.html 指向http://localhost/user/default.aspx?link=1

4. 基于Apache HTTP Server 静态化Apache Web Server 的配置(conf/httpd.conf )
A. 在httpd.conf 文件中查找LoadModule rewrite_module modules/mod_rewrite.so
通常该行被注释,去掉“#”。如果没有就增加该行。
B. 加入代码:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^/([0-9]+).html$ /user.php?user=$1
</IfModule>
C. 如果网站使用通过虚拟主机来定义,请务必加到虚拟主机配置文件.htccess 中去,否则可能
无法使用。
D. 重启Apache,重新载入配置。
E. 在地址栏输入http://localhost/1.html ,实际指向http://localhost/user.php?user=1

5. 静态化后文件格式
链接静态化后可以是html 文件,也可以是目录,通常目录的权重大于文件的权重,可以在搜索
引擎中获得更好的排名。
例如:优化前:http://www.xxxxxx.com/user.asp?id=1
优化后文件:http://www.xxxxxx.com/user/1.html
目录:http://www.xxxxxx.com/user/1/
同等条件下http://www.xxxxx.com/user/1/ 有更高的优先权。
框架结构
框架结构,即帧结构(Frame),包括IFrame,Frame。
例如:框架结构示例。
<frameset rows="97,*" cols="*" frameborder="yes" border="0" framespacing="0">
<frame src="top.html" name="topFrame" frameborder="no" scrolling="No" noresize="noresize"
id="topFrame" title="topFrame" />
<frameset rows="*" cols="164,*" framespacing="0" frameborder="no" border="0">
<frame src="search_left/cat20.html"ResizeImage(this,520)" src="http://www.zyseo.org/upload/960.png" alt="" title=""/>

自然状态下,Firefox窗体的大小约为 974 x 650. 减掉左右两边7px的边框,网页的实际大小为上图中的红色部分,高宽为 960 x 650.

有趣的960就这样出现了。是的,可以认为一切就这么简单。栅格系统最早出现在平面设计领域,设计师们爱用苹果,苹果下浏览器的默认宽度为960px, 于是960就这么“自然”地出现了。

数字背后的奥妙上面的“自然”出现,细究自然是不让人信服的。苹果系统的设计者们在没有喝醉酒的情况下选择了960,而不是其它什么1000之类的整数,自然另有奥妙。

科学界有很多问题都可以归结到数学问题上,我们也从数学着手:

 

960可以分解为2的6次方乘以3和5, 这使得960可以分割成以下宽度的整数倍:

2, 3, 4, 5, 6, 8, 10, 12, 15, 16, 20, 24, 30, 32, 40, 48, 60, 64, 80, 96, 120, 160, 192, 240, 320, 480共26种(26 = 7 * 2 * 2 - 2, 减去2是去掉1和960自身),我们标记为:

N(960) = N(2^6 * 3 * 5) = 26根据上面的算法,可以得到:

N(360) = N(2^3 * 3^2 * 5) = 22 N(480) = N(2^5 * 3 * 5) = 22 N(720) = N(2^4 * 3^2 * 5) = 28 N(750) = N(2 * 3 * 5^3) = 14 N(800) = N(2^5 * 5^2) = 16 N(960) = N(2^6 * 3 * 5) = 26 N(1000) = N(2^3 * 5^3) = 14 N(1024) = N(2^10) = 9 N(1440) = N(2^6 * 3^2 * 5) = 40 N(1920) = N(2^7 * 3 * 5) = 30根据直觉(严格证明也不难,不过还是留给数学系的学生去证明吧),我们得到一个有趣的结论:

要使得N(width)最大,width的取值有两个系列:
A系列: …, 320, 720, 1440, …
B系列: …, 480, 960, 1920, …

N越大,可组合的宽度值就越多。对栅格系统来说,这意味着越灵活!

目前绝大多数显示器都支持 1024 x 768 及其以上分辨率。为了有效的利用屏幕宽度同时保证栅格的灵活度,可以看出960是非常合适的。这样,在目前主流显示器下,960就成为网页栅格系统中的最佳宽度了。

]]>
程序与优化http://www.zyseo.org/post/wysg960.html#commenthttp://www.zyseo.org/http://www.zyseo.org/feed.asp?cmt=382http://www.zyseo.org/cmd.asp?act=tb&id=382&key=9e97ff82
SEO地爱歪:论小偷程序null@null.com (zyseo)http://www.zyseo.org/post/xiaotouchengxu.htmlTue, 02 Sep 2008 14:15:38 +0800http://www.zyseo.org/post/xiaotouchengxu.html剑善成佛,剑恶成魔!越是强大的东西,越是能造成大的破坏,所不同的是用在不同的人手上!闻名站长界的小偷程序也是如此!

嘿嘿,首先将今天在《风云决》中无名的话写在这里当作门面,毕竟我的写作文字水平 比不上ZAC师兄,比不上admin5的张扬的大鸟~拉大旗,扯虎皮的说。

不记得第一次看到小偷程序是什么时候了,当时依稀看到了如下的文字:用小偷程序的优点有:无须维护网站,因为小偷程序中的数据来自其他网站,它将随着该网站的更新而更新;可以节省服务器资源,一般小偷程序就几个文件,所有网页内容都是来自其他网站。缺点有:不稳定,如果目标网站出错,程序也会出错,而且,如果目标网站进行升级维护,那么小偷程序也要进行相应修改;速度,因为是远程调用,速度和在本地服务器上读取数据比起来,肯定要慢一些。

因为当时一心做站,同时对这些歪门邪道颇为鄙视,自然就没有深究小偷程序是个什么东东了!

直到有一次,导师的一个项目要求将两个网站的网页聚集在一个页面上,当时采取的方案是采用Ifframe的笨方法,等做完了之后,我才猛然想起有小偷程序,

网上百度一下原理:小偷程序实际上是通过了XML中的XMLHTTP组件调用其它网站上的网页。比如新闻小偷程序,很多都是调用了sina的新闻网页,并且对其中的html进行了一些替换,同时对广告也进行了过滤。

马上觉得小偷程序简直就是最佳方案啊!

自然是猛下功夫学习,半天功夫,会了!

下面是一段很简单的代码:

<%
'常用函数

'1、输入url目标网页地址,返回值getHTTPPage是目标网页的html代码
function getHTTPPage(url)
dim Http
set Http=server.createobject("MSXML2.XMLHTTP"
Http.open "GET",url,false
Http.send()
if Http.readystate<>4 then
exit function
end if
getHTTPPage=bytesToBSTR(Http.responseBody,"GB2312"
set http=nothing
if err.number<>0 then err.Clear
end function

'2、转换乱玛,直接用xmlhttp调用有中文字符的网页得到的将是乱玛,可以通过adodb.stream组件进行转换
Function BytesToBstr(body,Cset)
dim objstream
set objstream = Server.CreateObject("adodb.stream"
objstream.Type = 1
objstream.Mode =3
objstream.Open
objstream.Write body
objstream.Position = 0
objstream.Type = 2
objstream.Charset = Cset
BytesToBstr = objstream.ReadText
objstream.Close
set objstream = nothing
End Function

 


'下面试着调用的html内容
Dim Url,Html
Url="";
Html = getHTTPPage(Url)
Response.write Html
%>

不过今天我又遇到了一个难题,那就是对于设置了<style>
iframe{v:expression(this.src="/about:blank",this.outerHTML='');}
</style>

小偷程序无能为力,如果我们利用伪造来源标题sethttphead的方式,来设置referer的话,也没办法绕过去。

不知道哪位高手能解决此问题!

 

]]>
程序与优化http://www.zyseo.org/post/xiaotouchengxu.html#commenthttp://www.zyseo.org/http://www.zyseo.org/feed.asp?cmt=328http://www.zyseo.org/cmd.asp?act=tb&id=328&key=f40da8d3
自动生成CSS样式菜单null@null.com (zyseo)http://www.zyseo.org/post/zdscCSScd.htmlThu, 28 Aug 2008 13:33:47 +0800http://www.zyseo.org/post/zdscCSScd.html用CSS+DIV制作导航菜单是件极其麻烦的事情,那有没有比较简单的方法呢?这里向大家推荐一款可以自动生成CSS样式菜单的软件:CSS Tab Designer v2
在这个软件里你需要做的只是添加菜单项以及相应的链接地址,然后选择你喜欢的样式即可,里面已包含多达60种非常漂亮的菜单样式,基本上可以满足你的页面需求,既省时又省力…




下载网页:

直接下载:
 

 

]]>
程序与优化http://www.zyseo.org/post/zdscCSScd.html#commenthttp://www.zyseo.org/http://www.zyseo.org/feed.asp?cmt=325http://www.zyseo.org/cmd.asp?act=tb&id=325&key=97fe1868
GOOGLE的“403被禁止”错误null@null.com (zyseo)http://www.zyseo.org/post/google403.htmlFri, 25 Jul 2008 10:44:23 +0800http://www.zyseo.org/post/google403.html 

今天刚碰到Google的403错误,到网上找了好些方法,说得头头是道,可惜都无法解决这个问题,如删cookie,改maxthon的设置,删除注册表项,使用firefox、opera等其他内核的浏览器访问也不行;网上的方法不行,只有自己再尝试了。 同一IP短时间内超过了多少次搜索就被定义为恶意搜索行为 了吧,要是这样GOOGLE定义的算法也太不人性化了吧。
当然,最后最好最快的解决办法就是直接输入验证码就OK啦^_^,只是治标不治本!

下面附网上提供的解决办法:
按照Google的提示,删除了Cookies和历史记录,清除了一些不需要的IE插件后,仍然不能解决问题。
上Google搜索了很久,仍然没找到有效的解决方法。换成Firefox后,一切正常。所以,我猜想应该只是IE的问题,Google认为请求不是IE发送的,有可能是因为IE发送的HTTP Header有问题,导致Google认错。
于是安装WireShark,跟踪了一下IE的HTTP请求,发现IE的User Agent有问题,出现了很长一串乱七八糟的东东,如下:
Mozilla/4.0(Compatible Mozilla/4.0(Compatible-EmbeddedWB 14.59 http://bsalsa.com/ EmbeddedWB- 14.59
我想,很有可能是因为这个问题导致的,Google不认识这个User Agent,所以拒绝了连接。
查看了一个IE的User Agent配置,发现是在注册表定义的,主要有两个地方,分别是:
系统默认值:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\User Agent
当前用户的定义:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\User Agent
其中,在HKEY_CURRENT_USER处发现了Compatible-EmbeddedWB 14.59 http://bsalsa.com/.... ,修改了User Agent后,访问Gmail正常。
详细的修复办法:
1. 删除HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings下面的User Agent
2. 删除HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\User Agent\Post Platform下面,除SV1外的所有项。
按如上方法修改注册表后,再用WireShark跟踪了IE的HTTP请求,发现现在的User Agent正常了,也可以正常的登录Google帐号,包括Google邮件,Google Adsense等。

 

]]>
程序与优化http://www.zyseo.org/post/google403.html#commenthttp://www.zyseo.org/http://www.zyseo.org/feed.asp?cmt=293http://www.zyseo.org/cmd.asp?act=tb&id=293&key=6681d0a1
做网站中的加减乘除null@null.com (zyseo)http://www.zyseo.org/post/jiajianchengchu.htmlTue, 24 Jun 2008 09:52:41 +0800http://www.zyseo.org/post/jiajianchengchu.html1.做加法

说说我自己吧。刚刚进入这个领域,对这个领域的创新充满了期待。我曾经跟身边的同学说过,最快最易发现的创新在于 网络 世界。几天不上网,网络上你就可以发现很多不同类型的网站的崛起。而最慢的就是学校教授的研究,他可能一辈子都在做那个研究,结果等到人老了,研究还是没有取得突出的成绩。(当然,这一点比较有失严谨。)所以当年的李彦宏选择了放弃博士学位,选择了搞实际产品的研发,服务于大众。百度由此诞生。

说了半天,没有进入主题。刚刚开始做站的时候,肯定是没日没夜地往自己的网站上添加采集东西,心里只是想的越多越好,恨不得把网络上自己感到不错的资源全部打包搬到自己的网站上。还有就是感觉自己有很多想法,想做很多站, QQ 站想做,笑话幽默站也想做。小 游戏 也想整一个玩玩,总之是越多越好。其实这是一个做加法的过程。总是想不断地增加自己的拥有,占有更多的东西。我的小站别笑网就属于这种类型。

2.做减法

这时候的站长是经历了很多事情。做了很多网站,折腾了一个又一个垃圾站。但是收益都不是特别理想。看到hao123被百度天价收购,自己心里就痒痒了,就快马加鞭,连夜赶做一个hao123什么的网址大全出来;看到某某小游戏网站收入惊人,日进斗金,马上COPY一份。但是这样的努力都没有达到预想的效果。这时候,这样的站长开始做减法了。他开始从一大堆垃圾站中刷选出自己感到特别在行特别感兴趣且前途不错的网站,其余的统统枪毙掉,当然,能卖上几个银子的就以几乎白送的价格卖掉。免得浪费精力。这时候,站长手里留下的都是比较优秀的网站。自己每天花上很多时间和精力打理维护,就像照顾自己的孩子一样。这是一个做减法的过程,其实就是扬弃的过程。去其糟粕,取其精华。

3.做乘法

这时候的站长,做站经验已经达到一定的水平。再加上经常在网上观摩思考,其个人理想已经变得逐渐辽远和宏大。做站思路也已经变得很开阔,洞察力也已经不同往日。这时,他把握好局势,抓住一个机会,在自己的网站上加大投资力度。这时的网站,在原有优秀的基础上,其内容质量和用户黏度更上一层楼。在其领域站稳脚跟,网站的地位和声誉众人皆知。这就是一个做乘法的过程。这个时候,这个网站开始考虑到网站的社会影响力,开始考虑一定的社会责任。图王的站长网Admin5.com有这样的想法和趋势,但是做起乘法来,感觉还有些吃力。当然,像那些大的门户网站,已经在这方面早已经做足文章,发展得红红火火,亮堂一片。

4.做除法

这个过程,我感觉从中国的网络来看,还没有哪一家可以做到。即使是各大门户网站,中国的很多网站和公司都还处于一个不断地做减法和乘法的过程。还达不到做除法的资格。像微软那样的公司才可以做到。比尔盖茨是世界首富。金钱对于他来说,已经不是个问题。他把自己的money捐给了社会。财富来自于社会,应该回到社会的应用中去。这一种境界,在中国无人可以做到。这样的人,这样的公司,是一个真正地做除法的公司,已达到一个宏大的境界。

以上是我的一点个人的体悟,由于本人阅历经验有限,个中思想,错误偏颇,实属难免。希望大家能够给出指正和开解。

]]>
程序与优化http://www.zyseo.org/post/jiajianchengchu.html#commenthttp://www.zyseo.org/http://www.zyseo.org/feed.asp?cmt=266http://www.zyseo.org/cmd.asp?act=tb&id=266&key=6ae9f35e
HTML语法大全null@null.com (zyseo)http://www.zyseo.org/post/HTML.htmlMon, 16 Jun 2008 12:44:18 +0800http://www.zyseo.org/post/HTML.html<! - - ... - -> 註解 
 <!> 跑馬燈 
 <marquee>...</marquee>普通捲動 
 <marquee behavior=slide>...</marquee>滑動 
 <marquee behavior=scroll>...</marquee>預設捲動 
 <marquee behavior=alternate>...</marquee>來回捲動 
 <marquee direction=down>...</marquee>向下捲動 
 <marquee direction=up>...</marquee>向上捲動 
 <marquee direction=right></marquee>向右捲動 
 <marquee direction=left></marquee>向左捲動 
 <marquee loop=2>...</marquee>捲動次數 
 <marquee width=180>...</marquee>設定寬度 
 <marquee height=30>...</marquee>設定高度 
 <marquee bgcolor=FF0000>...</marquee>設定背景顏色 
 <marquee scrollamount=30>...</marquee>設定捲動距離 
 <marquee scrolldelay=300>...</marquee>設定捲動時間 
 <!>字體效果 
 <h1>...</h1>標題字(最大) 
 <h6>...</h6>標題字(最小) 
 <b>...</b>粗體字 
 <strong>...</strong>粗體字(強調) 
 <i>...</i>斜體字 
 <em>...</em>斜體字(強調) 
 <dfn>...</dfn>斜體字(表示定義) 
 <u>...</u>底線 
 <ins>...</ins>底線(表示插入文字) 
 <strike>...</strike>橫線 
 <s>...</s>刪除線 
 <del>...</del>刪除線(表示刪除) 
 <kbd>...</kbd>鍵盤文字 
 <tt>...</tt> 打字體 
 <xmp>...</xmp>固定寬度字體(在文件中空白、換行、定位功能有效) 
 <plaintext>...</plaintext>固定寬度字體(不執行標記符號) 
 <listing>...</listing> 固定寬度小字體 
 <font color=00ff00>...</font>字體顏色 
 <font size=1>...</font>最小字體 
 <font style =font-size:100 px>...</font>無限增大 
 <!>區斷標記 
 <hr>水平線 
 <hr size=9>水平線(設定大小) 
 <hr width=80%>水平線(設定寬度) 
 <hr color=ff0000>水平線(設定顏色) 
 <br>(換行) 
 <nobr>...</nobr>水域(不換行) 
 <p>...</p>水域(段落) 
 <center>...</center>置中 
 <!>連結格式 
 <base href=位址>(預設好連結路徑) 
 <a href=位址></a>外部連結 
 <a href=位址 target=_blank></a>外部連結(另開新視窗) 
 <a href=位址 target=_top></a>外部連結(全視窗連結) 
 <a href=位址 target=頁框名></a>外部連結(在指定頁框連結) 
 <!>貼圖/音樂 
 <img src=圖片位址>貼圖 
 <img src=圖片位址 width=180>設定圖片寬度 
 <img src=圖片位址 height=30>設定圖片高度 
 <img src=圖片位址 alt=提示文字>設定圖片提示文字 
 <img src=圖片位址 border=1>設定圖片邊框 
 <bgsound src=MID音樂檔位址>背景音樂設定 
 <!>表格語法 
 <table aling=left>...</table>表格位置,置左 
 <table aling=center>...</table>表格位置,置中 
 <table background=圖片路徑>...</table>背景圖片的URL=就是路徑網址 
 <table border=邊框大小>...</table>設定表格邊框大小(使用數字) 
 <table bgcolor=顏色碼>...</table>設定表格的背景顏色 
 <table borderclor=顏色碼>...</table>設定表格邊框的顏色 
 <table borderclordark=顏色碼>...</table>設定表格暗邊框的顏色 
 <table borderclorlight=顏色碼>...</table>設定表格亮邊框的顏色 
 <table cellpadding=參數>...</table>指定內容與格線之間的間距(使用數字) 
 <table cellspacing=參數>...</table>指定格線與格線之間的距離(使用數字) 
 <table cols=參數>...</table>指定表格的欄數 
 <table frame=參數>...</table>設定表格外框線的顯示方式 
 <table width=寬度>...</table>指定表格的寬度大小(使用數字) 
 <table height=高度>...</table>指定表格的高度大小(使用數字) 
 <td colspan=參數>...</td>指定儲存格合併欄的欄數(使用數字) 
 <td rowspan=參數>...</td>指定儲存格合併列的列數(使用數字) 
 <!>分割視窗 
 <frameset cols="20%,*">左右分割,將左邊框架分割大小為20%右邊框架的大小瀏覽器會自動調整 
 <frameset rows="20%,*">上下分割,將上面框架分割大小為20%下面框架的大小瀏覽器會自動調整 
 <frameset cols="20%,*">分割左右兩個框架 
 <frameset cols="20%,*,20%">分割左中右三個框架 
 <分割上下兩個框架 
 <frameset rows="20%,*,20%">分割上中下三個框架 
 <! - - ... - -> 註解 
 <A HREF TARGET> 指定超連結的分割視窗 
 <A HREF="ResizeImage(this,520)" src="http://www.zyseo.org/upload/121015374036副本.jpg" alt="" title=""/>

网页中的广告尺寸
1.首页右上,尺寸120*60
2.首页顶部通栏,尺寸468*60
3.首页顶部通栏,尺寸760*60
4.首页中部通栏,尺寸580*60
5.内页顶部通栏,尺寸468*60
6.内页顶部通栏,尺寸760*60
7.内页左上,尺寸150*60或300*300
8.下载地址页面,尺寸560*60或468*60
9.内页底部通栏,尺寸760*60
10.左漂浮,尺寸80*80或100*100
11.右漂浮,尺寸80*80或100*100

以上几种说法可能有点小的出入,大家可以探讨一下。

另:

IAB和EIAA发布新的网络广告尺寸标准

当前网络广告的各种尺寸繁多,doubleclick 近期居然数出有1万种不同的广告类型和尺寸正在网上使用。这让广告客户在价格、表现形式方面都难以选择,直接影响到他们对于网络广告的投入。
美国交互广告署(iab)和欧洲交互广告协会(eiaa)近期发布了有六个网络广告格式的工具盒,希望网络媒体作为标准采用,从而让媒体策划者的工作更容易开展,推进网络广告销售。
在这6种格式中,除了去年iab发布的4种“通用广告包”中的格式:160x600, 300x250, 180x150及728x90,还包括新公布的468x60 和120x600(擎天柱)2种。
iab总裁说,这是互联网商业发展的又一个分水岭。6种尺寸将成为整个欧洲市场网站的核心广告格式,广告客户可使用这几种尺寸在全欧洲网络媒体通行,而在以前这是不可能做到的。
iab曾在7月份说希望网络广告行业弃用一些老旧的、过时的广告格式。但这个提议遭到一些网络媒体的反对,因为被抛弃的一些更小、更轻便的格式仍然有它们的位置,尤其是在大量用户仍然使用窄带上网的情况下,太过严格限制尺寸“标准”会扼杀灵活创新。
因此,比起“通用广告包”的发布,iab和eiaa此番推出的工具盒有一种折衷的效果——既想达到他们削减广告尺寸数量、整饬行业规范的目的,又不至于让网络广告媒体们反对呼声过高。

]]>
程序与优化http://www.zyseo.org/post/shejibzchicun.html#commenthttp://www.zyseo.org/http://www.zyseo.org/feed.asp?cmt=257http://www.zyseo.org/cmd.asp?act=tb&id=257&key=265c839a
经典:两段不错的JS特效!null@null.com (zyseo)http://www.zyseo.org/post/JStexiao.htmlThu, 22 May 2008 10:30:04 +0800http://www.zyseo.org/post/JStexiao.html特效一:
<html>
<head>
<title>Link Style02 - Cocoon Studio</title>
< script LANGUAGE="Java script ">
CocoonStudio = function(){/* Published by Cocoon Studio. Url: www.ccopus.com */}
CocoonStudio.DHtml = function(){/* Author: Sunrise_Chen Email: sunrise_chen@msn.com */}
CocoonStudio.DHtml.LinkStyle02 = function(){/* CocoonStudio连接特效02 */}
CocoonStudio.DHtml.LinkStyle02.TemplteDiv = document.createElement("DIV");
CocoonStudio.DHtml.LinkStyle02.ActionCount = 8;
CocoonStudio.DHtml.LinkStyle02.SizeStep = 4;
CocoonStudio.DHtml.LinkStyle02.FadeStep = 5;
CocoonStudio.DHtml.LinkStyle02.FadeMax = 25;
CocoonStudio.DHtml.LinkStyle02.OffsetWidth = 16;
CocoonStudio.DHtml.LinkStyle02.OffsetHeight = 8;
CocoonStudio.DHtml.LinkStyle02.Timer = 0;
CocoonStudio.DHtml.LinkStyle02.ToX = 0;
CocoonStudio.DHtml.LinkStyle02.ToY = 0;
CocoonStudio.DHtml.LinkStyle02.CurrentX = 0;
CocoonStudio.DHtml.LinkStyle02.CurrentY = 0;
CocoonStudio.DHtml.LinkStyle02.StepWidth = 0;
CocoonStudio.DHtml.LinkStyle02.StepHeight = 0;
CocoonStudio.DHtml.LinkStyle02.IsMoving = false;

CocoonStudio.DHtml.LinkStyle02.Initial = function(){
with(CocoonStudio.DHtml.LinkStyle02.TemplteDiv){
with(style){
position = "absolute"; width = height = left = top = 0; display = "none";
backgroundColor = "#80FF00"; border = "1px solid #008000"; cursor = "hand";
filter = "progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)";
zIndex = -1;
}
}
document.body.insertAdjacentElement("beforeEnd",CocoonStudio.DHtml.LinkStyle02.TemplteDiv);
}

CocoonStudio.DHtml.LinkStyle02.MouseOver = function(sender){
with(CocoonStudio.DHtml.LinkStyle02){
var iAddSize = this.ActionCount * this.SizeStep * 2;
var oSrc = event.srcElement;
var o = CocoonStudio.DHtml.LinkStyle02.TemplteDiv;
this.CurrentX = o.offsetLeft; CurrentY = o.offsetTop;
ToX = event.x + document.body.scrollLeft - event.offsetX - (OffsetWidth / 2);
ToY = event.y + document.body.scrollTop - event.offsetY - (OffsetHeight / 2);
//StepWidth = 0.08*(ToX - CurrentX) ;
//StepHeight = 0.08*(ToY - CurrentY) ;
StepWidth = (ToX - CurrentX) / ActionCount ;
StepHeight = (ToY - CurrentY) / ActionCount ;
if(StepWidth>0) StepWidth = Math.ceil(StepWidth); else StepWidth = Math.floor(StepWidth);
if(StepHeight>0) StepHeight = Math.ceil(StepHeight); else StepHeight = Math.floor(StepHeight);
o.style.width = oSrc.scrollWidth + OffsetWidth;
o.style.height = oSrc.scrollHeight + OffsetHeight;
o.style.display = '';
oSrc.onmouseout = MouseOut;
//o.onmouseout = MouseOut;
//o.onclick = oSrc.click;
IsMoving = true;
FadeIn();
}
}

CocoonStudio.DHtml.LinkStyle02.MouseOut = function(){
with(CocoonStudio.DHtml.LinkStyle02){
if(IsMoving) return;
IsMoving = true;
FadeOut();
}
}

CocoonStudio.DHtml.LinkStyle02.FadeIn = function(){
with(CocoonStudio.DHtml.LinkStyle02){
with(TemplteDiv){
var iFade = filters[0].opacity;
if(iFade<=(this.FadeMax-this.FadeStep)) filters[0].opacity += this.FadeStep;
with(style){
pixelTop += this.StepHeight; pixelLeft += this.StepWidth;
if(Math.abs(pixelTop - this.ToY) <= Math.abs(this.StepHeight)) pixelTop = this.ToY;
if(Math.abs(pixelLeft - this.ToX) <= Math.abs(this.StepWidth)) pixelLeft = this.ToX;
if(pixelTop == this.ToY && pixelLeft == this.ToX && iFade >= this.FadeMax){
this.IsMoving = false;
return;
}
}
}
clearTimeout(Timer); Timer = setTimeout("CocoonStudio.DHtml.LinkStyle02.FadeIn()", 25);
}
}

CocoonStudio.DHtml.LinkStyle02.FadeOut = function(){
with(CocoonStudio.DHtml.LinkStyle02){
with(TemplteDiv){
var iFade = filters[0].opacity;
if(iFade>=FadeStep) filters[0].opacity -= FadeStep;
else{
CocoonStudio.DHtml.LinkStyle02.IsMoving = false;
filters[0].opacity = 0; style.display='none';
return;
}
}
clearTimeout(Timer); Timer = setTimeout("CocoonStudio.DHtml.LinkStyle02.FadeOut()",25);
}
}

window.onload = CocoonStudio.DHtml.LinkStyle02.Initial;
</ script >
< script language="Java script " event="onmouseover" for="CcLS02Menu">
CocoonStudio.DHtml.LinkStyle02.MouseOver(this);
</ script >
<style>
body, td{
font-size: 9pt;
}
td{cursor: hand;}
</style>
</head>

<body>
<TABLE cellpadding=0 cellspacing=10>
<TR>
<TD id="CcLS02Menu"><a href=" ">SEO论坛</a></TD>
<TD><a href=" " id="CcLS02Menu">寻擎SEO团队</a></TD>
</TR>
<TR>
<TD id="CcLS02Menu">Sunrise_Chen</TD>
<TD id="CcLS02Menu" onclick="alert('寻擎SEO团队)">Chinahtml</TD>
</TR>
<TR>
<TD id="CcLS02Menu">Cocoon Counter 6</TD>
<TD id="CcLS02Menu">Cocoon asp 探针</TD>
</TR>
<TR>
<TD id="CcLS02Menu">PCHOME.net Club - ASP</TD>
<TD id="CcLS02Menu" id="CcLS02Menu"></TD>
</TR>
<TR>
<TD id="CcLS02Menu">
这是一个单元格
</TD>
<TD>
<a id="CcLS02Menu" href="java script :alert('Welcome to our Chinahtml');">这是一个连接</a>
</TD>
</TR>
<TR>
<TD><div id="CcLS02Menu">这是一个DIV</div></TD>
<TD><STRONG id="CcLS02Menu">这是一个STRONG标签</STRONG></TD>
</TR>
</TABLE>
<div style="position:absolute;top:200;left:200;width:200;text-align:center;cursor:hand;border:1px solid gray" id="CcLS02Menu">这是一个浮动的层</div>
</body>
</html>

特效二:
<html>
<head>
<title>Link Style01 - Cocoon Studio</title>
< script LANGUAGE="Java script ">
CocoonStudio = function(){}
CocoonStudio.DHtml = function(){}
CocoonStudio.DHtml.LinkStyle01 = function(){}
CocoonStudio.DHtml.LinkStyle01.TemplteDiv = document.createElement("DIV");
with(CocoonStudio.DHtml.LinkStyle01.TemplteDiv){
with(style){
position = "absolute"; display = "none"; width = height = 0;
backgroundColor = "#80FF00"; border = "1px solid #008000"; cursor = "hand";
filter = "progid:DXImageTransform.Microsoft.Alpha(style=3,opacity=0,finishOpacity=0) BlendTrans(duration=1);";
}
}
CocoonStudio.DHtml.LinkStyle01.ActionCount = 10;
CocoonStudio.DHtml.LinkStyle01.SizeStep = 4;
CocoonStudio.DHtml.LinkStyle01.FadeStep = 10;
CocoonStudio.DHtml.LinkStyle01.Timer = new Array();
CocoonStudio.DHtml.LinkStyle01.Items = new Array();

CocoonStudio.DHtml.LinkStyle01.Initial = function(){
document.body.insertAdjacentElement("beforeEnd",CocoonStudio.DHtml.LinkStyle01.TemplteDiv);
}

CocoonStudio.DHtml.LinkStyle01.MouseOver = function(){
var o;
var iAddSize = this.ActionCount * this.SizeStep * 2;
var oSrc = event.srcElement;
var c = oSrc.sourceIndex;
with(o=CocoonStudio.DHtml.LinkStyle01.TemplteDiv.cloneNode(true)){
with(style){
display = ''; width = oSrc.scrollWidth + iAddSize; height = oSrc.scrollHeight + iAddSize;
pixelTop = oSrc.offsetTop - iAddSize / 2; pixelLeft = oSrc.offsetLeft - iAddSize / 2;
}
onclick = oSrc.click;
onmouseout = new Function("CocoonStudio.DHtml.LinkStyle01.FadeOut("+c+");");
}
CocoonStudio.DHtml.LinkStyle01.Items[c] = o;
document.body.insertAdjacentElement("beforeEnd",o);
this.FadeIn(c);
setTimeout("CocoonStudio.DHtml.LinkStyle01.FadeOut("+c+");" ,1500);
}

CocoonStudio.DHtml.LinkStyle01.FadeIn = function(c,n){
if(!c) return; var p = n; if(!p) p = 0;
var o = CocoonStudio.DHtml.LinkStyle01.Items[c]; if(!o) return;
with(o){
var iFade = filters[0].opacity;
if(iFade<=(100-this.FadeStep)) filters[0].opacity += this.FadeStep;
with(style){
width = parseInt(width) - this.SizeStep*2; height = parseInt(height) - this.SizeStep*2;
pixelTop += this.SizeStep; pixelLeft += this.SizeStep;
}
}
if(p>=this.ActionCount-3) return;
CocoonStudio.DHtml.LinkStyle01.Timer[c] = setTimeout("CocoonStudio.DHtml.LinkStyle01.FadeIn("+c+","+(++p)+");",50);
}

CocoonStudio.DHtml.LinkStyle01.FadeOut = function(c,n){
if(!c) return; var p = n; if(!p) p = this.ActionCount-1;
clearTimeout(CocoonStudio.DHtml.LinkStyle01.Timer[c]);
var o = CocoonStudio.DHtml.LinkStyle01.Items[c]; if(!o) return;
with(o){
var iFade = filters[0].opacity;
if(iFade>=this.FadeStep) filters[0].opacity -= this.FadeStep;
with(style){
width = parseInt(width) + this.SizeStep; height = parseInt(height) + this.SizeStep;
pixelTop -= this.SizeStep/2; pixelLeft -= this.SizeStep/2;
}
}
if(p<=1){ o.removeNode(true); p=0; return; }
setTimeout("CocoonStudio.DHtml.LinkStyle01.FadeOut("+c+","+(--p)+");",25);
}

window.onload = CocoonStudio.DHtml.LinkStyle01.Initial;
</ script >
< script language="Java script " event="onmousemove" for="CcLS02Menu">
CocoonStudio.DHtml.LinkStyle01.MouseOver();
</ script >
<style>
body{
font-size: 9pt;
}
</style>
</head>

<body>

<a href="java script :void(0);" onclick="alert(innerText)" onmouseover="CocoonStudio.DHtml.LinkStyle01.MouseOver()">Cocoon Studio</a>

<a href="java script :void(0);" onclick="alert(innerText)" onmouseover="CocoonStudio.DHtml.LinkStyle01.MouseOver()">Sunrise_Chen</a>

<a href="java script :void(0);" onclick="alert(innerText)" onmouseover="CocoonStudio.DHtml.LinkStyle01.MouseOver()">www.chinahtml.com.com</a>
<p>

<a href="java script :void(0);" onclick="alert(innerText)" onmouseover="CocoonStudio.DHtml.LinkStyle01.MouseOver()">Cocoon Asp Check</a>

<a href="java script :void(0);" onclick="alert(innerText)" onmouseover="CocoonStudio.DHtml.LinkStyle01.MouseOver()">Cocoon Counter 6</a>

<a href="java script :void(0);" onclick="alert(innerText)" onmouseover="CocoonStudio.DHtml.LinkStyle01.MouseOver()">Cocoon Disk Manager 4.5</a>

<a href="java script :void(0);" onclick="alert(innerText)" onmouseover="CocoonStudio.DHtml.LinkStyle01.MouseOver()">Cocoon MS-Access DbAdmin 1.0</a>
</body>
</html>

]]>
程序与优化http://www.zyseo.org/post/JStexiao.html#commenthttp://www.zyseo.org/http://www.zyseo.org/feed.asp?cmt=233http://www.zyseo.org/cmd.asp?act=tb&id=233&key=6e26bcf0
js禁止保存网页的代码null@null.com (zyseo)http://www.zyseo.org/post/jswangye.htmlTue, 09 Oct 2007 10:34:10 +0800http://www.zyseo.org/post/jswangye.htmljs禁止保存网页的代码2007-09-28 09:211. oncontextmenu="window.event.returnvalue=false" 将彻底屏蔽鼠标右键

no

可用于Table 2. 取消选取、防止复制 3. onpaste="return false" 不准粘贴 4. oncopy="return false;" oncut="return false;" 防止复制 5.IE地址栏前换成自己的图标 6.可以在收藏夹中显示出你的图标 7. 关闭输入法 8. 永远都会带着框架

9. 防止被人frame

10.

网页将不能被另存为 11. 12. 怎样通过asp的手段来检查来访者是否用了代理

13. 取得控件的绝对位置 //javascript

//VBScript

14. 光标是停在文本框文字的最后

15. 判断上一页的来源 asp: request.servervariables("HTTP_REFERER") javascript: document.referrer 16. 最小化、最大化、关闭窗口

]]>
程序与优化http://www.zyseo.org/post/jswangye.html#commenthttp://www.zyseo.org/http://www.zyseo.org/feed.asp?cmt=77http://www.zyseo.org/cmd.asp?act=tb&id=77&key=6db91edc