<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>反正乱拨 &#187; 老技术</title>
	<atom:link href="http://swayweb.com/category/tech/feed" rel="self" type="application/rss+xml" />
	<link>http://swayweb.com</link>
	<description>Sway的官方博客</description>
	<lastBuildDate>Mon, 19 Jul 2010 12:54:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>从父窗口调用子窗口的方法</title>
		<link>http://swayweb.com/tech/1439</link>
		<comments>http://swayweb.com/tech/1439#comments</comments>
		<pubDate>Mon, 19 Jul 2010 12:54:08 +0000</pubDate>
		<dc:creator>Sway</dc:creator>
				<category><![CDATA[老技术]]></category>
		<category><![CDATA[Bom]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://swayweb.com/?p=1439</guid>
		<description><![CDATA[这是一个BOM问题，我这里指的子窗口(child window)是指从一个窗口通过window.open或iframe技术所创建的window对象，当然，父窗口(parent window)就是创建子窗口的原始窗口。网上总是有许多介绍从子窗口调用父窗口的方法的文章，但没有讲如何从父窗口调用子窗口方法，这里晒一晒最近做项目摸索出的小窍门，看代码吧： var childWin, interval, callFunc = function(){ if(childWin.childFunc){ //childFunc表示试图调用的存在于子窗口的函数 childWin.childFunc(); window.clearInterval(interval); } }; interval = window.setInterval(callFunc,300); childWin = window.open('some-url', 'some-windowname'); 由于window.open是异步执行的，子页面的加载需要一定时间，也就是说childFunc并不是马上就会出现，所以做了一个300ms的轮循来检查childFunc的可用性。当然，由于安全因素，此方法只适用于两个页面主域相同的情况。]]></description>
			<content:encoded><![CDATA[<p>这是一个BOM问题，我这里指的子窗口(child window)是指从一个窗口通过window.open或iframe技术所创建的window对象，当然，父窗口(parent window)就是创建子窗口的原始窗口。网上总是有许多介绍从子窗口调用父窗口的方法的文章，但没有讲如何从父窗口调用子窗口方法，这里晒一晒最近做项目摸索出的小窍门，看代码吧：</p>
<pre>    var childWin, interval,
    callFunc = function(){
           if(childWin.childFunc){   //childFunc表示试图调用的存在于子窗口的函数
                childWin.childFunc();
                window.clearInterval(interval);
           }
       };
   interval =  window.setInterval(callFunc,300);
   childWin = window.open('some-url', 'some-windowname');</pre>
<p>由于window.open是异步执行的，子页面的加载需要一定时间，也就是说childFunc并不是马上就会出现，所以做了一个300ms的轮循来检查childFunc的可用性。当然，由于安全因素，此方法只适用于两个页面主域相同的情况。</p>
]]></content:encoded>
			<wfw:commentRss>http://swayweb.com/tech/1439/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>My first Safari 5 bug</title>
		<link>http://swayweb.com/tech/1433</link>
		<comments>http://swayweb.com/tech/1433#comments</comments>
		<pubDate>Tue, 15 Jun 2010 05:33:20 +0000</pubDate>
		<dc:creator>Sway</dc:creator>
				<category><![CDATA[老技术]]></category>

		<guid isPermaLink="false">http://swayweb.com/?p=1433</guid>
		<description><![CDATA[听说Safari5比Firefox快1倍，甚至比Chrome还要快一点（3%）。我也迫不及待地将Safari更新至最新版本(Safari for Windows)。最近试用时发现了一个bug，现发布在此，看看大家有无此现象。 该bug的现象是：通过与页面交互而产生的阻塞(block)窗口并不能阻止用户继续对页面内容进行操作，例如：在我的测试页面中，点击彩色的区块可以产生一个alert对话框，按照正确的处理方式，在关闭此对话框之前我们将不能对页面进行操作，然而事实不是这样，你仍然可以通过鼠标激发每个彩色区块的hover状态、可以继续点击彩色区块弹出alert对话框、可以点击页面上的链接(Link 1)，你甚至可以穿过对话框点击一个看不见的链接(Link 2)，不信你试试，很疯狂吧？目前我知道的能回到正常轨道的方法是：用鼠标点击一下页面上还没有绑定事件的区域。 我刚刚提到，这个bug的出现需要与页面交互，例如在页面加载完成后自动弹出的alert并没有问题；同时，这个bug同样存在于promt和confirm函数。 虽然alert、promt、confirm如今已经用得很少了，但当这个bug出现时，还是会造成更差的使用体验和安全隐患的。]]></description>
			<content:encoded><![CDATA[<p>听说Safari5比Firefox快1倍，甚至比Chrome还要快一点（3%）。我也迫不及待地将Safari更新至最新版本(Safari for Windows)。最近试用时发现了一个bug，现发布在此，看看大家有无此现象。</p>
<p>该bug的现象是：通过与页面交互而产生的阻塞(block)窗口并不能阻止用户继续对页面内容进行操作，例如：在我的<a href="http://swayweb.com/studyfiles/safari5-alert-bug-test.html" target="_blank">测试页面</a>中，点击彩色的区块可以产生一个alert对话框，按照正确的处理方式，在关闭此对话框之前我们将不能对页面进行操作，然而事实不是这样，你仍然可以通过鼠标激发每个彩色区块的hover状态、可以继续点击彩色区块弹出alert对话框、可以点击页面上的链接(Link 1)，你甚至可以穿过对话框点击一个看不见的链接(Link 2)，不信你试试，很疯狂吧？目前我知道的能回到正常轨道的方法是：用鼠标点击一下页面上还没有绑定事件的区域。</p>
<p>我刚刚提到，这个bug的出现需要与页面交互，例如在页面加载完成后自动弹出的alert并没有问题；同时，这个bug同样存在于promt和confirm函数。</p>
<p>虽然alert、promt、confirm如今已经用得很少了，但当这个bug出现时，还是会造成更差的使用体验和安全隐患的。</p>
]]></content:encoded>
			<wfw:commentRss>http://swayweb.com/tech/1433/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>IE6 resize event bug 解决方案</title>
		<link>http://swayweb.com/tech/1409</link>
		<comments>http://swayweb.com/tech/1409#comments</comments>
		<pubDate>Thu, 08 Apr 2010 15:45:27 +0000</pubDate>
		<dc:creator>Sway</dc:creator>
				<category><![CDATA[老技术]]></category>
		<category><![CDATA[browsers]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[javascrip]]></category>

		<guid isPermaLink="false">http://swayweb.com/?p=1409</guid>
		<description><![CDATA[最近写组件时碰到一个问题：对window对象监听resize事件，当浏览器窗口大小发生改变时，在IE6和IE7下监听函数会被执行多次，这与我们期望的执行一次可不吻合。更可怕的是，在某些DTD下，DOM中某个元素区块的大小发生变化时也会激发window的resize监听函数，且在IE6和IE7下看我的例子。在这个例子里，当点击&#8221;Zoom In&#8221;或&#8221;Zoom Out&#8221;改变红框大小时，激发了window的resize事件，不过元素的位置移动不会导致这个bug，不信点击&#8221;Move&#8221;按钮移动绿框试试，以上这些奇怪的效果IE7同样存在。至于浏览器窗口大小发生改变时监听函数反复执行的错误就与DTD没有关系了。为了防止函数多次执行，每次window的resize事件发生时，我们可以判断一下浏览器窗口大小是否改变了，只有真的改变时我们才执行监听函数，Javascript代码大概会是这样： ... var width = document.documentElement.clientWidth, height = document.documentElement.clientHeight; window.onresize = function(){ if(width != document.documentElement.clientWidth &#124;&#124; height = document.documentElement.clientHeight){ resizeFunc(); } width = document.documentElement.clientWidth; height = document.documentElement.clientHeight; } ... 为什么不加一个浏览器检测呢，那样在非IE浏览器下就可以用常规写法了。可是据我测试，风头不小的Chrome也会犯这个错误。所以，还是以防万一吧。]]></description>
			<content:encoded><![CDATA[<p>最近写组件时碰到一个问题：对window对象监听resize事件，当浏览器窗口大小发生改变时，在IE6和IE7下监听函数会被执行多次，这与我们期望的执行一次可不吻合。更可怕的是，在某些DTD下，DOM中某个元素区块的大小发生变化时也会激发window的resize监听函数，且在IE6和IE7下看我的<a href="http://swayweb.com/labs/resize-test.html">例子</a>。在这个例子里，当点击&#8221;Zoom In&#8221;或&#8221;Zoom Out&#8221;改变红框大小时，激发了window的resize事件，不过元素的位置移动不会导致这个bug，不信点击&#8221;Move&#8221;按钮移动绿框试试，以上这些奇怪的效果IE7同样存在。至于浏览器窗口大小发生改变时监听函数反复执行的错误就与DTD没有关系了。为了防止函数多次执行，每次window的resize事件发生时，我们可以判断一下浏览器窗口大小是否改变了，只有真的改变时我们才执行监听函数，Javascript代码大概会是这样：</p>
<pre><code>...
var width = document.documentElement.clientWidth,
     height = document.documentElement.clientHeight;
window.onresize = function(){
	if(width != document.documentElement.clientWidth ||
           height = document.documentElement.clientHeight){
		resizeFunc();
	}
	width = document.documentElement.clientWidth;
        height = document.documentElement.clientHeight;
}
...
</code></pre>
<p>为什么不加一个浏览器检测呢，那样在非IE浏览器下就可以用常规写法了。可是据我测试，风头不小的Chrome也会犯这个错误。所以，还是以防万一吧。</p>
]]></content:encoded>
			<wfw:commentRss>http://swayweb.com/tech/1409/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>用YQL帮助显示Twitter消息</title>
		<link>http://swayweb.com/tech/1395</link>
		<comments>http://swayweb.com/tech/1395#comments</comments>
		<pubDate>Tue, 22 Dec 2009 11:33:44 +0000</pubDate>
		<dc:creator>Sway</dc:creator>
				<category><![CDATA[老技术]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[YQL]]></category>

		<guid isPermaLink="false">http://swayweb.com/?p=1395</guid>
		<description><![CDATA[我们经常看到一些Blog或者内容发布站点会将自己的Twitter消息显示在网站的某个位置（比如边栏），这些功能大多都是由后台程序（如PHP）来完成，若没有个人可管理的服务器或者不支持运行后台程序将无法使用；使用JavaScript版的则需要浏览器端能正常访问Twitter数据源，但由于某些网络原因也无法实现。 今天自己动手写了一个基于YQL和JavaScript的简单脚本，可以帮助人们实现显示个人Twitter消息的需求，本页面边栏的“Tweets”就是使用它来实现的。所以只要你的站点可以运行JavaScript，并且能访问YAHOO! API ;那么就放心地将下面的代码嵌入到你想在自己站点上显示Twitter 的地方吧，如下: &#60;script type=&#8221;text/javascript&#8221; src=&#8221;http://swayweb.com/labs/twitter_timeline.js&#8221;&#62;id:swaydeng,limit:5,style:false&#60;/script&#62; 其中&#8217;swaydeng&#8217;替换成你的TwitterId，limit代表你打算显示twitter的条数（小于等于20），style表示嵌入的twitter消息框是否需要加入CSS样式，目前是false。 就是这么简单，欢迎使用。]]></description>
			<content:encoded><![CDATA[<p>我们经常看到一些Blog或者内容发布站点会将自己的Twitter消息显示在网站的某个位置（比如边栏），这些功能大多都是由后台程序（如PHP）来完成，若没有个人可管理的服务器或者不支持运行后台程序将无法使用；使用JavaScript版的则需要浏览器端能正常访问<a href="http://twitter.com" target="_blank">Twitter</a>数据源，但由于某些网络原因也无法实现。</p>
<p>今天自己动手写了一个基于YQL和JavaScript的简单脚本，可以帮助人们实现显示个人Twitter消息的需求，本页面边栏的“Tweets”就是使用它来实现的。所以只要你的站点可以运行JavaScript，并且能访问<a href="http://www.yahooapis.com/" target="_blank">YAHOO! API</a> ;那么就放心地将下面的代码嵌入到你想在自己站点上显示Twitter 的地方吧，如下:</p>
<p>&lt;script type=&#8221;text/javascript&#8221; src=&#8221;http://swayweb.com/labs/twitter_timeline.js&#8221;&gt;id:swaydeng,limit:5,style:false&lt;/script&gt;</p>
<p>其中&#8217;swaydeng&#8217;替换成你的TwitterId，limit代表你打算显示twitter的条数（小于等于20），style表示嵌入的twitter消息框是否需要加入CSS样式，目前是false。</p>
<p>就是这么简单，欢迎使用。</p>
]]></content:encoded>
			<wfw:commentRss>http://swayweb.com/tech/1395/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>1px Dotted Border Bug In Chrome3.0</title>
		<link>http://swayweb.com/tech/1389</link>
		<comments>http://swayweb.com/tech/1389#comments</comments>
		<pubDate>Tue, 08 Dec 2009 06:52:41 +0000</pubDate>
		<dc:creator>Sway</dc:creator>
				<category><![CDATA[老技术]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://swayweb.com/?p=1389</guid>
		<description><![CDATA[这是一个关于浏览器对CSS属性border的解析问题。在IE6下，当把边框(border-width)设置为1像素并且边框样式(border-style)设置为dotted时，IE6通常会渲染成虚线(dashed)而不是我们想要的点线(dotted)，这就是古老的1px Dotted Border Bug In Internet Explorer 6，好消息是在IE6以后的版本里修复了这个bug。 然而最近做测试时发现，以上提到的IE6的bug很不幸地转移到了Chrome上，具体现象是：在Chrome3.0下，当把边框(border-width)设置为1像素并且边框样式(border-style)设置为dotted时，无论长短，线段中部都会有一段实线，只有当border-width大于1px时才正常，很奇怪；补充一点，同样使用WebKit引擎的Safari3.2并不存在这个错误。 本人的测试环境：操作系统是WinXp Pro，屏幕分辨率是1280&#215;800，浏览器是Chrome3.0.195.33。我在想，这难道是Chrome的一个渲染bug？模仿IE，先称此bug为1px Dotted Border Bug In Chrome3。 测试页面(Test Page)]]></description>
			<content:encoded><![CDATA[<p>这是一个关于浏览器对CSS属性border的解析问题。在IE6下，当把边框(border-width)设置为1像素并且边框样式(border-style)设置为dotted时，IE6通常会渲染成虚线(dashed)而不是我们想要的点线(dotted)，这就是古老的1px Dotted Border Bug In Internet Explorer 6，好消息是在IE6以后的版本里修复了这个bug。</p>
<p>然而最近做测试时发现，以上提到的IE6的bug很不幸地转移到了Chrome上，具体现象是：在Chrome3.0下，当把边框(border-width)设置为1像素并且边框样式(border-style)设置为dotted时，无论长短，线段中部都会有一段实线，只有当border-width大于1px时才正常，很奇怪；补充一点，同样使用WebKit引擎的Safari3.2并不存在这个错误。</p>
<p>本人的测试环境：操作系统是WinXp Pro，屏幕分辨率是1280&#215;800，浏览器是Chrome3.0.195.33。我在想，这难道是Chrome的一个渲染bug？模仿IE，先称此bug为1px Dotted Border Bug In Chrome3。</p>
<p><a href="http://swayweb.com/studyfiles/css/chrome3-1px-dotted-bug.html" target="_blank">测试页面(Test Page)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://swayweb.com/tech/1389/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Notepad++目录插件:Explorer plugin</title>
		<link>http://swayweb.com/tech/1384</link>
		<comments>http://swayweb.com/tech/1384#comments</comments>
		<pubDate>Tue, 01 Dec 2009 07:26:53 +0000</pubDate>
		<dc:creator>Sway</dc:creator>
				<category><![CDATA[老技术]]></category>
		<category><![CDATA[IDE]]></category>

		<guid isPermaLink="false">http://swayweb.com/?p=1384</guid>
		<description><![CDATA[除了Windows自带的文本编辑器notepad，我还用UltraEdit、Notepad++、Editplus，UltraEdit业界口碑很好，但由于中文用户需要处理较多编码问题，我个人觉得UltraEdit对编码处理并不是很方便；Editplus运行飞快，尤其对一些超大文本的处理比Notepad++强很多，而且其“目录窗口”对于管理复杂结构文件目录很有用，但是在符号配对方面，其仅仅支持括号配对而不支持标签配对，这对于经常编辑XML、HTML文档的人员很不利（当然也有强人不需要）；Notepad++是我最喜欢的编辑器，除了其官方介绍的等等优点以外，我个人很喜欢其标签配对功能、灵活的编码选择和硬朗的外观，虽然处理超大文本常常假死，但我可以勉强用以上提到的Editplus替代，唯一让我遗憾的是Notepad++没有类似Editplus和UltraEdit都具备的“目录窗口”。今天，对于我，以上问题不再是问题了，Notepad++是支持插件的，一款插件帮我解决了难题，它就是Explorer plugin，它让我们的Notepad++也拥有“目录窗口”，变得更加完美。 现在Explorer plugin的最新版本是Version1.8.2，下载后解压可得到文件Explorer.dll，将其放在 “Notepad++安装目录/plugins”下，重启Notepad++会发现工具栏多了一个叫Explorer的按钮，点击之，即可看到期待已久的“目录窗口”。]]></description>
			<content:encoded><![CDATA[<p>除了Windows自带的文本编辑器notepad，我还用UltraEdit、Notepad++、Editplus，UltraEdit业界口碑很好，但由于中文用户需要处理较多编码问题，我个人觉得UltraEdit对编码处理并不是很方便；Editplus运行飞快，尤其对一些超大文本的处理比Notepad++强很多，而且其“目录窗口”对于管理复杂结构文件目录很有用，但是在符号配对方面，其仅仅支持括号配对而不支持标签配对，这对于经常编辑XML、HTML文档的人员很不利（当然也有强人不需要）；Notepad++是我最喜欢的编辑器，除了其<a href="http://notepad-plus.sourceforge.net/tw/site.htm" target="_blank">官方介绍</a>的等等优点以外，我个人很喜欢其标签配对功能、灵活的编码选择和硬朗的外观，虽然处理超大文本常常假死，但我可以勉强用以上提到的Editplus替代，唯一让我遗憾的是Notepad++没有类似Editplus和UltraEdit都具备的“目录窗口”。今天，对于我，以上问题不再是问题了，Notepad++是支持插件的，一款插件帮我解决了难题，它就是<a href="http://sourceforge.net/projects/npp-plugins/files/Explorer/Explorer_1_8_2_UNI_dll.zip">Explorer plugin</a>，它让我们的Notepad++也拥有“目录窗口”，变得更加完美。</p>
<p>现在<a href="http://sourceforge.net/projects/npp-plugins/files/Explorer/Explorer_1_8_2_UNI_dll.zip">Explorer plugin</a>的最新版本是Version1.8.2，下载后解压可得到文件Explorer.dll，将其放在 “Notepad++安装目录/plugins”下，重启Notepad++会发现工具栏多了一个叫Explorer的按钮，点击之，即可看到期待已久的“目录窗口”。</p>
]]></content:encoded>
			<wfw:commentRss>http://swayweb.com/tech/1384/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>对input 使用focus()函数(兼容Firefox和IE)</title>
		<link>http://swayweb.com/tech/1372</link>
		<comments>http://swayweb.com/tech/1372#comments</comments>
		<pubDate>Sun, 29 Nov 2009 13:35:26 +0000</pubDate>
		<dc:creator>Sway</dc:creator>
				<category><![CDATA[老技术]]></category>
		<category><![CDATA[Dom]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://swayweb.com/?p=1372</guid>
		<description><![CDATA[我们有时会有这样的需求：当页面加载完成后自动将光标定位到某个输入框上，起到引导和方便用户之功效，如谷歌首页、Gmail登陆界面等；原理较简单，通常可以用一段Javascript略微控制，如 ... window.onload = function(){ document.getElementById('term').focus(); //假设页面中需要赋予焦点的input的id为'term'; } ... 以上代码可以解决input框初始值为空的情况，假如初始值不为空，如我们引导用户输入一个网址，使初始值为&#8217;http://&#8217;，这时HTML可能是这样: ... ... 如果再试图用上面的Javascript代码来赋予焦点，会发现在Firefox下光标停在input框内文字的末尾，而在IE6下却停在了input框内文字的开头处，通常，Firefox的执行结果使我们所希望的。要想让IE6得到像Firefox一样的结果，以下是我的解决办法： ... window.onload = function(){ var term = document.getElementById('term'); term.focus(); term.value = term.value; //关键就是多加了这一句; } ...]]></description>
			<content:encoded><![CDATA[<p>我们有时会有这样的需求：当页面加载完成后自动将光标定位到某个输入框上，起到引导和方便用户之功效，如谷歌首页、Gmail登陆界面等；原理较简单，通常可以用一段Javascript略微控制，如</p>
<pre name="code" class="html">...
window.onload = function(){
   document.getElementById('term').focus(); //假设页面中需要赋予焦点的input的id为'term';
 }
...</pre>
<p>以上代码可以解决input框初始值为空的情况，假如初始值不为空，如我们引导用户输入一个网址，使初始值为&#8217;http://&#8217;，这时HTML可能是这样:</p>
<pre name="code" class="html">...
<input id="term" type="text" value="http://"  />
...</pre>
<p>如果再试图用上面的Javascript代码来赋予焦点，会发现在Firefox下光标停在input框内文字的末尾，而在IE6下却停在了input框内文字的开头处，通常，Firefox的执行结果使我们所希望的。要想让IE6得到像Firefox一样的结果，以下是我的解决办法：</p>
<pre name="code" class="html">...
   window.onload = function(){
     var term = document.getElementById('term');
     term.focus();
     term.value = term.value;     //关键就是多加了这一句;
   }
...</pre>
]]></content:encoded>
			<wfw:commentRss>http://swayweb.com/tech/1372/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>跨浏览器Ext版网页漂浮广告JavaScript函数</title>
		<link>http://swayweb.com/tech/1306</link>
		<comments>http://swayweb.com/tech/1306#comments</comments>
		<pubDate>Thu, 30 Jul 2009 14:50:58 +0000</pubDate>
		<dc:creator>Sway</dc:creator>
				<category><![CDATA[老技术]]></category>
		<category><![CDATA[Ext]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://swayweb.com/?p=1306</guid>
		<description><![CDATA[今天浙大门户系统提出一个需求，用户登录后希望网页上可以漂浮一个小图片，提醒同学可以做在线咨询，我一听，这不就是本人最讨厌的网页广告吗，可没办法，人家给钱，你就是奴才。 在网上一搜，这类脚本铺天盖地，基本是一样的，纯JS写成，拷过来一用，静态页面时IE和Firefox都正常，改成JSP后在IE下还好，Firefox下就不行了，该飘的东西一动不动，改了半天没改出来，想想咱们门户每次加载都带上了Ext库，咱们也别浪费了，我就用Ext写了个跨浏览器的漂浮JavaScript函数，在JSP下通过IE、Firefox及Safari测试，Chrome应该也没问题。函数源码如下： function floatInfo(id, distance, per){ var flagH = 0; var flagW = 0; var distance4L = distance; var avaiH = document.body.clientHeight - id.getHeight(); var avaiW = document.body.clientWidth - id.getWidth(); var task = {run: function(){ id.setTop(id.getTop() + distance); flagH += distance; if(flagH &#62;= avaiH &#124;&#124; flagH &#60;= (-avaiH)) { distance = (-distance); flagH = 0; [...]]]></description>
			<content:encoded><![CDATA[<p>今天浙大门户系统提出一个需求，用户登录后希望网页上可以漂浮一个小图片，提醒同学可以做在线咨询，我一听，这不就是本人最讨厌的网页广告吗，可没办法，人家给钱，你就是奴才。<br />
在网上一搜，这类脚本铺天盖地，基本是一样的，纯JS写成，拷过来一用，静态页面时IE和Firefox都正常，改成JSP后在IE下还好，Firefox下就不行了，该飘的东西一动不动，改了半天没改出来，想想咱们门户每次加载都带上了Ext库，咱们也别浪费了，我就用Ext写了个跨浏览器的漂浮JavaScript函数，在JSP下通过IE、Firefox及Safari测试，Chrome应该也没问题。函数源码如下：</p>
<div style="padding-left:30px;border:1px solid silver;font-weight:bold;">
<pre>function floatInfo(id, distance, per){
   var flagH = 0;
   var flagW = 0;
   var distance4L = distance;
   var avaiH = document.body.clientHeight - id.getHeight();
   var avaiW = document.body.clientWidth - id.getWidth();
   var task = {run: function(){
                        id.setTop(id.getTop() + distance);
                        flagH += distance;
                        if(flagH &gt;= avaiH || flagH &lt;= (-avaiH)) {
                                distance = (-distance);
                                flagH = 0;
                        }
                       id.setLeft(id.getLeft() + distance4L);
                       flagW += distance4L;
                       if(flagW &gt;= avaiW || flagW &lt;= (-avaiW)) {
                       distance4L = (-distance4L);
                       flagW = 0;
                       }
                   },
                  interval: per
                }
  Ext.TaskMgr.start(task);
}</pre>
</div>
<p>传入参数id代表网页上要漂浮元素的id；distance是数字，代表一次移动多少像素；per也是数字，代表多长时间移动一次，其中1000代表1秒，数字越小移动越快。使用方式如下：</p>
<div style="padding-left:30px;border:1px solid silver;font-weight:bold;">
<pre>&lt;script type="text/javascript"&gt;
   Ext.onReady(function(){
      var id = Ext.get('float_dis');
      floatInfo(id,10,300);
   })
&lt;/script&gt;</pre>
</div>
<p>虽然用Ext写这种东西是有点杀鸡焉用牛刀的味道，但谁叫本人对跨浏览器的脚本编程这么差呢。</p>
]]></content:encoded>
			<wfw:commentRss>http://swayweb.com/tech/1306/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>5招轻松提高网站访问速度</title>
		<link>http://swayweb.com/tech/1270</link>
		<comments>http://swayweb.com/tech/1270#comments</comments>
		<pubDate>Fri, 17 Jul 2009 14:33:02 +0000</pubDate>
		<dc:creator>Sway</dc:creator>
				<category><![CDATA[老技术]]></category>
		<category><![CDATA[网站优化]]></category>

		<guid isPermaLink="false">http://swayweb.com/?p=1270</guid>
		<description><![CDATA[.        一些著名博客站点（如月光博客）由于拥有独立服务器托管和良好带宽，页面访问迅速极快，而小博客往往是花小钱租借空间，访问并不理想。曾经我也发誓等哪天有钱了也给自己的空间升升级，可想到雅虎兴起、杨致远成名后还在用电话线上网的故事，本人决定将页面优化进行到底。这里分享几点页面优化的心得。 .        一次Web访问概括起来讲就是“前台-后台-前台”，用户通过浏览器向服务器发送HTTP请求，服务器接收到请求后调用后台程序运行计算并向浏览器回送浏览器可识别可解释内容（如HTML、脚本文件、CSS、图像、Flash动画、视频和音频等），最后又重新通过浏览器将这一切呈现给我们，因此，要改变访问速度，就可以在这个过程中“动手脚”。 1.    网页尽量少包含图片（这招实用易操作）；这有两个方面，一个是用于装饰网站的基本图片，另一个是文章中用户做插图的图片。曾经用本人的网站做过测试：将网站首页保存到本地，当文章包含几张普通插图时有680K，而去掉图片后只剩下120多K。图片是消耗网站加载速度的一大原因。 2.   减少HTTP请求次数；刚刚我们粗略分析了一次Web访问的全过程（“前台-后台-前台”），经研究，一次HTTP请求中只用了10%~20%的时间来接收和渲染页面，而有80% ~ 90%的时间用在发出请求上，因此减少HTTP请求是节约时间的有效手段。通常可以通过合并文件来减少，假设一个网站包含1个HTML文件、2个Javascript文件、2个CSS文件以及零碎的11个小图片文件，1+2+2+11=16，也就是说需要发送16次HTTP请求，而如果我们将2个Javascript文件合并在一起，CSS文件及图片文件也用相同方法合并，这时请求数减少到 1+1+1+1=4（次）。如果加载的文件更多，这样改进的效果将更加明显。 3.   压缩文件；将需要加载的文件如CSS、脚本经过一些专门的压缩工具压缩成较小的包，这有助于提高网页下载速度。当网页中包含较大的脚本文件时，用压缩工具可以看到惊人的压缩比。 4.   合理安排文件加载顺序；由于文件的加载顺序一般是按照其在文本中出现的先后顺序来进行的，我们将CSS文件包含在&#60;HEAD&#62;标签中，而Javascript文件往往放在最后加载(一般在&#60;/body&#62;之前即可)。 5.   尽量少用&#60;TABLE&#62;标签构建页面布局；用&#60;TABLE&#62;元素构建网页布局是传统的构建方法，但不得不说这是一个落后且需要淘汰的方法，我们提倡使用&#60;DIV&#62;标签来规划页面布局，因为&#60;TABLE&#62;构建的网页需要整个TABLE包含的内容都加载后才会呈现，对于网速慢的网络浏览器容易出现白屏，给用户带来极差的体验，而用&#60;DIV&#62;构建的网页采用局部加载，即使网络不佳，页面也是逐步呈现而不是白屏等待。 .        以上五点是本人的一些实际操作经验，虽然网站优化还有很多学问，但做了以上5点，我相信网站一定会出现令人高兴地变化。]]></description>
			<content:encoded><![CDATA[<p>.        一些著名博客站点（如<a href="http://www.williamlong.info/" target="_blank">月光博客</a>）由于拥有独立服务器托管和良好带宽，页面访问迅速极快，而小博客往往是花小钱租借空间，访问并不理想。曾经我也发誓等哪天有钱了也给自己的空间升升级，可想到雅虎兴起、杨致远成名后还在用电话线上网的故事，本人决定将页面优化进行到底。这里分享几点页面优化的心得。</p>
<p>.        一次Web访问概括起来讲就是“前台-后台-前台”，用户通过浏览器向服务器发送HTTP请求，服务器接收到请求后调用后台程序运行计算并向浏览器回送浏览器可识别可解释内容（如HTML、脚本文件、CSS、图像、Flash动画、视频和音频等），最后又重新通过浏览器将这一切呈现给我们，因此，要改变访问速度，就可以在这个过程中“动手脚”。</p>
<p><span style="color: #ff0000;"><strong>1</strong></span>.   <span style="text-decoration: underline;"><span style="color: #0000ff;"> 网页尽量少包含图片</span></span>（这招实用易操作）；这有两个方面，一个是用于装饰网站的基本图片，另一个是文章中用户做插图的图片。曾经用本人的网站做过测试：将网站首页保存到本地，当文章包含几张普通插图时有680K，而去掉图片后只剩下120多K。图片是消耗网站加载速度的一大原因。</p>
<p><span style="color: #ff0000;"> <strong>2</strong></span>.  <span style="text-decoration: underline;"> <span style="color: #0000ff;">减少HTTP请求次数</span></span>；刚刚我们粗略分析了一次Web访问的全过程（“前台-后台-前台”），经研究，一次HTTP请求中只用了10%~20%的时间来接收和渲染页面，而有80% ~ 90%的时间用在发出请求上，因此减少HTTP请求是节约时间的有效手段。通常可以通过合并文件来减少，假设一个网站包含1个HTML文件、2个Javascript文件、2个CSS文件以及零碎的11个小图片文件，1+2+2+11=16，也就是说需要发送16次HTTP请求，而如果我们将2个Javascript文件合并在一起，CSS文件及图片文件也用相同方法合并，这时请求数减少到 1+1+1+1=4（次）。如果加载的文件更多，这样改进的效果将更加明显。</p>
<p><strong><span style="color: #ff0000;"> 3</span></strong>.   <span style="text-decoration: underline;"><span style="color: #0000ff;">压缩文件</span></span>；将需要加载的文件如CSS、脚本经过一些专门的压缩工具压缩成较小的包，这有助于提高网页下载速度。当网页中包含较大的脚本文件时，用压缩工具可以看到惊人的压缩比。</p>
<p><span style="color: #ff0000;"><strong> 4</strong></span>.  <span style="text-decoration: underline;"> <span style="color: #0000ff;">合理安排文件加载顺序</span></span>；由于文件的加载顺序一般是按照其在文本中出现的先后顺序来进行的，我们将CSS文件包含在&lt;HEAD&gt;标签中，而Javascript文件往往放在最后加载(一般在&lt;/body&gt;之前即可)。</p>
<p><span style="color: #ff0000;"><strong> 5</strong></span>.   <span style="text-decoration: underline;"><span style="color: #0000ff;">尽量少用&lt;TABLE&gt;标签构建页面布局</span></span>；用&lt;TABLE&gt;元素构建网页布局是传统的构建方法，但不得不说这是一个落后且需要淘汰的方法，我们提倡使用&lt;DIV&gt;标签来规划页面布局，因为&lt;TABLE&gt;构建的网页需要整个TABLE包含的内容都加载后才会呈现，对于网速慢的网络浏览器容易出现白屏，给用户带来极差的体验，而用&lt;DIV&gt;构建的网页采用局部加载，即使网络不佳，页面也是逐步呈现而不是白屏等待。</p>
<p>.        以上五点是本人的一些实际操作经验，虽然网站优化还有很多学问，但做了以上5点，我相信网站一定会出现令人高兴地变化。</p>
]]></content:encoded>
			<wfw:commentRss>http://swayweb.com/tech/1270/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Reader学习社交网，增加Like互动功能</title>
		<link>http://swayweb.com/tech/1265</link>
		<comments>http://swayweb.com/tech/1265#comments</comments>
		<pubDate>Thu, 16 Jul 2009 13:57:25 +0000</pubDate>
		<dc:creator>Sway</dc:creator>
				<category><![CDATA[老技术]]></category>
		<category><![CDATA[GoogleReader]]></category>

		<guid isPermaLink="false">http://swayweb.com/?p=1265</guid>
		<description><![CDATA[今晚如往常一样打开Google Reader准备看点东西，突然发现页面上多了些新东西，首先是页面左上方多了一个很黄很清晰的提醒：You can now search for people sharing publicly in Reader. search for some people，经了解和试用，其作用是搜索名字可以得到被搜索人通过Google Reader分享(share)的条目，当然，只有该用户的分享名单中有包含你，才可以阅读；还有一个功能，也是比较有意义的功能是Google Reader在每篇RSS下增加了一个&#8221;Like&#8221;按钮，你只需点击它或是按键盘上的L键，就可表示你“Like”这篇文章了，类似于对文章投票，文章标题下会有一行字如“24 people liked this”，当你点击这行字还能看到具体哪些网友“Like”了此文，这很容易让人联想到Digg。对了，为了避免意外，本人使用的是Google Reader 英文版，以上两个功能目前只投放到Google Reader 英文版。 昨天刚发了篇对Google表示疑惑的博客，今天总算看到了喜欢的Google。看到诸如Facebook、Twitter这样的WEB2.0产品现今如此火爆，并拥有无限将来和钱景，Google大哥是应该放低姿态学习学习，虽然之前也没觉得静悄悄的Reader有什么不适，但增加这样小小的互动功能无疑会让用户在阅读之余感觉到有趣。 不足之处也有：人物关键词搜索若能升级到关键词、热点词搜索将会使此功能更加有用，同时增加一个类似于Twitter今日热点话题展示区，可以帮助阅读者获得最新rss源；最后，“Like”一词总觉得有点不到位，英语还凑合着用，要是以后翻译成中文变成“24个网友喜欢了它”感觉也太过了，个人以为英语可以用“push”(避免与digg撞衫)，中文可以翻译成“24个网友觉得该文不错”。]]></description>
			<content:encoded><![CDATA[<p><a href="http://swayweb.com/tag/googlereader"><img class="alignright size-full wp-image-1264" title="GoogleReader" src="http://swayweb.com/wp-content/uploads/2009/07/GoogleReader.jpg" alt="GoogleReader" width="169" height="74" /></a>今晚如往常一样打开<a href="http://www.google.com/reader" target="_blank">Google Reader</a>准备看点东西，突然发现页面上多了些新东西，首先是页面左上方多了一个很黄很清晰的提醒：You can now search for people sharing publicly in Reader. search for some people，经了解和试用，其作用是搜索名字可以得到被搜索人通过Google Reader分享(share)的条目，当然，只有该用户的分享名单中有包含你，才可以阅读；还有一个功能，也是比较有意义的功能是Google Reader在每篇RSS下增加了一个&#8221;Like&#8221;按钮，你只需点击它或是按键盘上的L键，就可表示你“Like”这篇文章了，类似于对文章投票，文章标题下会有一行字如“<span>24 people liked this</span>”，当你点击这行字还能看到具体哪些网友“Like”了此文，这很容易让人联想到<a href="http://digg.com" target="_blank">Digg</a>。对了，为了避免意外，本人使用的是Google Reader 英文版，以上两个功能目前只投放到Google Reader 英文版。</p>
<p>昨天刚发了篇对Google表示疑惑的博客，今天总算看到了喜欢的Google。看到诸如<a href="http://www.facebook.com" target="_blank">Facebook</a>、<a href="http://twitter.com" target="_blank">Twitter</a>这样的WEB2.0产品现今如此火爆，并拥有无限将来和钱景，Google大哥是应该放低姿态学习学习，虽然之前也没觉得静悄悄的Reader有什么不适，但增加这样小小的互动功能无疑会让用户在阅读之余感觉到有趣。</p>
<p>不足之处也有：人物关键词搜索若能升级到关键词、热点词搜索将会使此功能更加有用，同时增加一个类似于Twitter今日热点话题展示区，可以帮助阅读者获得最新rss源；最后，“Like”一词总觉得有点不到位，英语还凑合着用，要是以后翻译成中文变成“24个网友喜欢了它”感觉也太过了，个人以为英语可以用“push”(避免与digg撞衫)，中文可以翻译成“24个网友觉得该文不错”。</p>
]]></content:encoded>
			<wfw:commentRss>http://swayweb.com/tech/1265/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
