<?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>色胚子部落</title>
	<atom:link href="http://blog.colorbase.tw/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.colorbase.tw</link>
	<description>訊息多變的時代裡，需要多學習多思考</description>
	<lastBuildDate>Sun, 20 Jun 2010 10:06:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>解決使用 jQuery.getJSON 時 Session 卻過期期的問題</title>
		<link>http://blog.colorbase.tw/web-development/1141</link>
		<comments>http://blog.colorbase.tw/web-development/1141#comments</comments>
		<pubDate>Sun, 20 Jun 2010 10:06:25 +0000</pubDate>
		<dc:creator>阿育</dc:creator>
				<category><![CDATA[Web開發]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.colorbase.tw/web-development/1141</guid>
		<description><![CDATA[當我們在做具有權限控管的網頁時，將會用到Session來做為是否已登入的紀錄及處理，通常在判斷為尚未登入時，將直接顯示錯誤訊息頁面或轉到登入表單頁面，但如果使用jQuery.getJSON()來做AJAX應用的話這樣的處理就不恰當了，因為這樣一來Session因為閒置過久而過期的話 getJSON() 將會得到非預期的結果而導致程式發生錯誤。
 
當然這種問題的解決的辦法有許多個，我們也可以在getJSON()取得資料後再判斷目前得到的資料是否正確，但這樣一來前端的程式碼將會顯得很囉嗦，因此解決辦法中有一個簡單又實用的就是直接取代 jQuery 的 getJOSN()，並搭配後端的對於不同請求給予不同的回應，來統一簡化整個判斷流程。
這裡主要用到了之前所提「使用 PHP 判斷 jQuery 傳來的 AJAX 請求類型」及「取代jQuery內置函數」兩種技巧。
在Javascript中寫入取代jQuery.getJSON()的函數：

(function($) {

	/**
	 * 取代 jQuery 的 JSON
	 */
	$.getJSON = function(url,paramData,callback){

		if($.isFunction(paramData)) {
			callback = paramData;
			paramData = null;
		}

		var opt = {
			url: url,
			dataType: 'json',
			cache: false,
			data: paramData,
			success: function(data, textStatus, XMLHttpRequest){

				if(null === data) return opt.error(XMLHttpRequest,textStatus);

				var handleError = false;

				if(data.TimeoutError != undefined ){
					if(data.TimeoutError == true){
						handleError = true;
						//提示錯誤訊息
						alert('您可能閒置過久，請重新登入系統再重試');
						//進一步轉向登入頁面
						window.location = '登入頁面URL';
					}
				}

				if(!handleError &#38;&#38; callback ...]]></description>
			<content:encoded><![CDATA[<p>當我們在做具有權限控管的網頁時，將會用到Session來做為是否已登入的紀錄及處理，通常在判斷為尚未登入時，將直接顯示錯誤訊息頁面或轉到登入表單頁面，但如果使用jQuery.getJSON()來做AJAX應用的話這樣的處理就不恰當了，因為這樣一來Session因為閒置過久而過期的話 getJSON() 將會得到非預期的結果而導致程式發生錯誤。</p>
<p> <span id="more-1141"></span>
<p>當然這種問題的解決的辦法有許多個，我們也可以在getJSON()取得資料後再判斷目前得到的資料是否正確，但這樣一來前端的程式碼將會顯得很囉嗦，因此解決辦法中有一個簡單又實用的就是直接取代 jQuery 的 getJOSN()，並搭配後端的對於不同請求給予不同的回應，來統一簡化整個判斷流程。</p>
<p>這裡主要用到了之前所提「<a href="http://blog.colorbase.tw/web-development/668" target="_blank">使用 PHP 判斷 jQuery 傳來的 AJAX 請求類型</a>」及「取代jQuery內置函數」兩種技巧。</p>
<p>在Javascript中寫入取代jQuery.getJSON()的函數：</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:3f743993-4a17-479d-9727-3b783d8c652f" class="wlWriterEditableSmartContent">
<pre name="code" class="js:nogutter">(function($) {

	/**
	 * 取代 jQuery 的 JSON
	 */
	$.getJSON = function(url,paramData,callback){

		if($.isFunction(paramData)) {
			callback = paramData;
			paramData = null;
		}

		var opt = {
			url: url,
			dataType: 'json',
			cache: false,
			data: paramData,
			success: function(data, textStatus, XMLHttpRequest){

				if(null === data) return opt.error(XMLHttpRequest,textStatus);

				var handleError = false;

				if(data.TimeoutError != undefined ){
					if(data.TimeoutError == true){
						handleError = true;
						//提示錯誤訊息
						alert('您可能閒置過久，請重新登入系統再重試');
						//進一步轉向登入頁面
						window.location = '登入頁面URL';
					}
				}

				if(!handleError &amp;&amp; callback != undefined) {
					callback(data, textStatus, XMLHttpRequest);
				}
			},
			error: function(XMLHttpRequest, textStatus, errorThrown){
				//提示錯誤訊息
				alert('連線發生錯誤！請檢查您的連線並重新嘗試');
			}
		};

		$.ajax(opt);

	};

})(jQuery);</pre>
</div>
<p>在PHP中給予不同回應：</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:d5938bc4-2520-4538-8d79-06c4ad512813" class="wlWriterEditableSmartContent">
<pre name="code" class="php:nogutter">session_start();
if(!isset($_SESSION['login'])){ // 尚未登入
	if('application/json, text/javascript, */*' == $_SERVER['HTTP_ACCEPT']){
		//回應給取代後的getJSON()
		echo json_encode( array('TimeoutError' =&gt; true) );
	}else{
		//轉向登入頁面表單
		header('location: 登入頁面URL');
	}
}else{
	// 已登入的其他處理......
	echo json_encode( array('msg' =&gt; '取得訊息') );
}
</pre>
</div>
<p>之後一樣使用jQuery.getJSON()完全不變：</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:d2751d1b-d3cb-4e7c-81cb-4b78e3f1785d" class="wlWriterEditableSmartContent">
<pre name="code" class="js:nogutter">$(function(){

	$('#test').click(function(){
		// 取得 JSON資料
		// 若已登入將顯示「取得訊息」
		// 若未登入或Session過期將顯示「您可能閒置過久，請重新登入系統再重試」
		$.getJSON('/index.php',function(data){
			alert(data.msg);
		});
	});

});</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.colorbase.tw/web-development/1141/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>檢測訪客瀏覽器對 HTML5 與 CSS3 的支援程度</title>
		<link>http://blog.colorbase.tw/web-development/1099</link>
		<comments>http://blog.colorbase.tw/web-development/1099#comments</comments>
		<pubDate>Sun, 23 May 2010 02:26:00 +0000</pubDate>
		<dc:creator>阿育</dc:creator>
				<category><![CDATA[Web開發]]></category>
		<category><![CDATA[cross-browser]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[detecting]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[modernizr]]></category>
		<category><![CDATA[判斷]]></category>
		<category><![CDATA[檢測]]></category>
		<category><![CDATA[瀏覽器]]></category>
		<category><![CDATA[跨瀏覽器]]></category>

		<guid isPermaLink="false">http://blog.colorbase.tw/web-development/1099</guid>
		<description><![CDATA[由於各主流瀏覽器對於 HTML5 與 CSS3 中支援的程度不一，如果我們想要搶先嘗試使用它們的的新功能，卻又想要在各種瀏覽器中保持一定的可用性，那麼勢必要在 Javascript 中撰寫相關的判斷程式碼來進行判斷瀏覽器是否支援新特性，如果訪客的瀏覽器支援，則使用新功能，而反之則執行替代的程式碼或者提示使用者所使用的瀏覽器將會有部分進階功能無法使用。
 
關於目前各主流瀏覽器的支援情況可參考之前的文章 HTML5 與 CSS3 準備好了嗎？
自行撰寫 Javascript 進行 HTML5 與 CSS3 的檢測
如果我們使用到的 HTML5 與 CSS3 新特性並不多，則可以自行撰寫相關的檢測碼來進行判斷，至於該如何檢測，則可參考：    The All-In-One Almost-Alphabetical No-Bullshit Guide to Detecting Everything
文章中除了羅列一大堆 HTML5 等檢測的片段程式碼，也提到了一個很好用的函式庫 Modernizer。

Modernizr
 
Modernizr 是一個非常小巧的函式庫 (大約 8 KB，gzip壓縮後大約3.9 KB)，它用於檢測瀏覽器對於 HTML5 與 CSS3 支援程度，其首頁也提供了一份即時的檢測表，當使用不同的瀏覽器進入該網站時，將可看到不同的檢測結果，這個檢測表其實也可以當做一種瀏覽器支援參考，當安裝了新版本的瀏覽器時只要進入這個網站就可以即時知道瀏覽器是否有增加了什麼 HTML5 或 CSS3 的新功能。
先讓&#160; IE 支援 HTML5 的新標籤
由於 IE9 ...]]></description>
			<content:encoded><![CDATA[<p>由於各主流瀏覽器對於 HTML5 與 CSS3 中支援的程度不一，如果我們想要搶先嘗試使用它們的的新功能，卻又想要在各種瀏覽器中保持一定的可用性，那麼勢必要在 Javascript 中撰寫相關的判斷程式碼來進行判斷瀏覽器是否支援新特性，如果訪客的瀏覽器支援，則使用新功能，而反之則執行替代的程式碼或者提示使用者所使用的瀏覽器將會有部分進階功能無法使用。</p>
<p> <span id="more-1099"></span>
<p>關於目前各主流瀏覽器的支援情況可參考之前的文章 <a href="http://blog.colorbase.tw/web-development/1070" target="_blank">HTML5 與 CSS3 準備好了嗎？</a></p>
<h2>自行撰寫 Javascript 進行 HTML5 與 CSS3 的檢測</h2>
<p>如果我們使用到的 HTML5 與 CSS3 新特性並不多，則可以自行撰寫相關的檢測碼來進行判斷，至於該如何檢測，則可參考：    <br /><a href="http://diveintohtml5.org/everything.html" target="_blank">The All-In-One Almost-Alphabetical No-Bullshit Guide to Detecting Everything</a></p>
<p>文章中除了羅列一大堆 HTML5 等檢測的片段程式碼，也提到了一個很好用的函式庫 Modernizer。</p>
</p>
<h2>Modernizr</h2>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="modernizr" border="0" alt="modernizr" src="http://blog.colorbase.tw/wp-content/uploads/2010/05/modernizr.jpg" width="400" height="286" /> </p>
<p><a href="http://www.modernizr.com/" target="_blank">Modernizr</a> 是一個非常小巧的函式庫 (大約 8 KB，gzip壓縮後大約3.9 KB)，它用於檢測瀏覽器對於 <strong>HTML5</strong> 與 <strong>CSS3</strong> 支援程度，其首頁也提供了一份即時的檢測表，當使用不同的瀏覽器進入該網站時，將可看到不同的檢測結果，這個檢測表其實也可以當做一種瀏覽器支援參考，當安裝了新版本的瀏覽器時只要進入這個網站就可以即時知道瀏覽器是否有增加了什麼 HTML5 或 CSS3 的新功能。</p>
<h2>先讓&#160; IE 支援 HTML5 的新標籤</h2>
<p>由於 IE9 之後才認得 HTML5 的新標籤，因此若要讓舊版本的IE也認得 HTML5的新標籤，則可以使用<a href="http://code.google.com/p/html5shiv/" target="_blank">html5shiv</a>來讓 IE 支援 HTML5 的新標籤，使用方式為加入以下的語法於&lt;head&gt;之間。</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:df468869-4434-4e78-bfbb-73fdaa23c52c" class="wlWriterEditableSmartContent">
<pre name="code" class="xml:nogutter">&lt;!--[if IE]&gt;
&lt;script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"&gt;&lt;/script&gt;
&lt;![endif]--&gt;</pre>
</div>
<h2>使用 Modernizr </h2>
<p>Modernizr 的使用方式很簡單，只需於&lt;head&gt;之間使用&lt;script&gt;標籤引入這個函式庫即可：</p>
<p class="tip">&lt;script src=&quot;modernizr.min.js&quot;&gt;&lt;/script&gt;</p>
<p>接著我們就可以在 Javascript 或 CSS 中做相對應的判斷及處理。</p>
</p>
<h3>在 Modernizr 中使用 Javascript 判斷</h3>
</p>
<p>Modernizr 載入後，即可使用 Modernizr.特性名稱的方式來判斷瀏覽器的支援，例如以下為判斷瀏覽器是否支援 canvas。</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:6d8c5b01-69b5-4f9a-86bb-4873d0262736" class="wlWriterEditableSmartContent">
<pre name="code" class="js:nogutter">if (Modernizr.canvas) { //判斷瀏覽器是否支援 canvas
	alert("支援");
}else{
	alert("不支援");
}</pre>
</div>
<h3>在 Modernizr 中使用 CSS 判斷</h3>
<p>Modernizr 使用了一個非常聰明的方法來達成 CSS 判斷的功能，它在載入完成後將會自動檢測瀏覽器的支援情況並將其寫入 &lt;html&gt; 標籤的 class 屬性，其類別名稱的格式為：</p>
<p class="tip">支援：<strong>特性名稱</strong></p>
<p class="tip">不支援：<strong>no-特性名稱</strong></p>
</p>
<p><strong></strong></p>
<p>例如當瀏覽器支援支援 canvastext 時，&lt;html&gt;標籤的 class 屬性中將會有一個 <strong><font color="#800000">canvastext</font></strong> 值。</p>
<p>相反的當瀏覽器不支援 canvastext 時，&lt;html&gt;標籤的 class 屬性中將會有一個 <strong><font color="#800000">no-canvastext</font></strong>值。</p>
<p>如此一來我們就可以輕易的使用 CSS Selector 來做出相對應的判斷，例如，在 HTML 中：</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:e0726f3c-2d84-4eae-aa0c-ab7c662515c4" class="wlWriterEditableSmartContent">
<pre name="code" class="xml:nogutter">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
	&lt;meta charset="utf-8"&gt;
	&lt;title&gt;Modernizr Test&lt;/title&gt;
	&lt;link rel="stylesheet" href="style.css" type="text/css" media="screen"&gt;
	&lt;!--[if IE]&gt;
	&lt;script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"&gt;&lt;/script&gt;
	&lt;![endif]--&gt;
	&lt;script src="modernizr.min.js"&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;div id="canvasContainer"&gt;
		 &lt;canvas id="c"&gt;&lt;/canvas&gt;
		 &lt;p class="supported"&gt;瀏覽器支援 canvastext&lt;/p&gt;
		 &lt;p class="noSupported"&gt;瀏覽器不支援 canvastext！&lt;/p&gt;
	&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
</div>
<p>在 style.css 中，透過以下的 CSS，在支援 canvastext 中將顯示「<strong>瀏覽器支援 canvastext</strong>」，反之則顯示「<strong>瀏覽器不支援 canvastext！</strong>」。</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:41348c61-527e-4e53-a9ce-466db63c7a6c" class="wlWriterEditableSmartContent">
<pre name="code" class="css:nogutter">#canvasContainer p{
	display: none;
}

.canvastext #canvasContainer .supported {
	display: block;
}

.no-canvastext #canvasContainer .noSupported {
   display: block;
}</pre>
</div>
<p><a href="http://blog.colorbase.tw/html5/modernizr/" target="_blank">點我觀看 Modernizr CSS Selector 檢測範例</a></p>
<p>同理，若要利用 CSS 判斷瀏覽器是否支援 video 則可使用「.video / .no-video」兩個 CSS 類別。</p>
<p>更多 Modernizr 支援的 HTML5 與 CSS3 特性檢測，請參閱其<a href="http://www.modernizr.com/docs/" target="_blank">使用手冊</a>。</p>
<h2>需注意的事情</h2>
<ol>
<li>Modernizr 只能提供檢測而不能替瀏覽器增加新功能以達成兼容。 </li>
<li>若要兼容 video 可使用 <a href="http://code.google.com/p/video4all/">video4all</a>來達成，更多詳情可參考 <a href="http://blog.colorbase.tw/web-development/947" target="_blank">開始HTML5 – Video</a>。 </li>
<li>若要讓 IE 6, 7, 8 支援 CSS3 可使用<a href="http://www.fetchak.com/ie-css3/" target="_blank">CSS3 support for IE</a>來達成。 </li>
</ol>
<h2>相關連結與參考文章</h2>
<ul>
<li><a href="http://www.modernizr.com/" target="_blank">Modernizr</a> </li>
<li><a href="http://diveintohtml5.org/everything.html" target="_blank">The All-In-One Almost-Alphabetical No-Bullshit Guide to Detecting Everything</a> </li>
<li><a href="http://diveintohtml5.org/detect.html" target="_blank">Detecting HTML5 Features</a> </li>
<li><a href="http://code.google.com/p/video4all/">video4all</a> </li>
<li><a href="http://www.fetchak.com/ie-css3/" target="_blank">CSS3 support for IE</a> </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.colorbase.tw/web-development/1099/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>HTML5 與 CSS3 準備好了嗎？</title>
		<link>http://blog.colorbase.tw/web-development/1070</link>
		<comments>http://blog.colorbase.tw/web-development/1070#comments</comments>
		<pubDate>Sun, 16 May 2010 04:20:35 +0000</pubDate>
		<dc:creator>阿育</dc:creator>
				<category><![CDATA[Web開發]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[thinking]]></category>
		<category><![CDATA[trend]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[網路趨勢]]></category>
		<category><![CDATA[網頁設計]]></category>
		<category><![CDATA[網頁開發]]></category>
		<category><![CDATA[趨勢]]></category>

		<guid isPermaLink="false">http://blog.colorbase.tw/web-development/1070</guid>
		<description><![CDATA[HTML5 與 CSS3 不斷出現各種令人驚艷的應用，引起了業界的高度關注，它把許多原本屬於 Flash 的特殊應用搬到了 Web 標準中，而標準化的好處在哪我想不需要我多說了，但 HTML5 與 CSS3 真的準備好了嗎？
從 HTML &#38; CSS3 Readiness 這份圖表可以很容易看出一些關鍵，它把 HTML5 與 CSS3 從 2008 年到 2010 年各個主流瀏覽器的支援情形以扇形區色塊圖的方式呈現，每個瀏覽器及渲染引擎都有自己的色系。

目前支援度最高的新特性為 Drag and Drop / @font-face / contenteditable 。
目前支援度最佳的瀏覽器為 Chrome 與 Safari。
目前支援度最差的瀏覽器為 IE 系列。


HTML &#38; CSS3 Reandiness
HTML5 與  CSS3 現在最需要什麼？
良好的集成式開發環境
我想對於開發人員而言，最需要的還是工具，因為純手工編製複雜的 Web 應用可真是一件吃力不討好的工作，但我相信只要有市場便不怕沒工具，之前 Adobe CTO Kevin Lynch 也已經說要為HTML5開發工具了，我也相信在公開的標準規範之下將會有更多軟體開發商投入精力創造出更好用的產品。
廣泛的普及
既然工具的問題排除了，那麼剩下的便是普及性的問題了，但很顯然的它們仍然還沒完全準備好，在 When can I use ...]]></description>
			<content:encoded><![CDATA[<p>HTML5 與 CSS3 不斷出現各種令人驚艷的應用，引起了業界的高度關注，它把許多原本屬於 Flash 的特殊應用搬到了 Web 標準中，而標準化的好處在哪我想不需要我多說了，但 HTML5 與 CSS3 真的準備好了嗎？</p>
<p>從 <a href="http://html5readiness.com/" target="_blank">HTML &amp; CSS3 Readiness</a> 這份圖表可以很容易看出一些關鍵，它把 HTML5 與 CSS3 從 2008 年到 2010 年各個主流瀏覽器的支援情形以扇形區色塊圖的方式呈現，每個瀏覽器及渲染引擎都有自己的色系。<span id="more-1070"></span></p>
<ol>
<li>目前支援度最高的新特性為 Drag and Drop / @font-face / contenteditable 。</li>
<li>目前支援度最佳的瀏覽器為 Chrome 與 Safari。</li>
<li>目前支援度最差的瀏覽器為 IE 系列。</li>
</ol>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/05/html5_css3_readiness.jpg"><img style="display: inline; border-width: 0px;" title="html5_css3_readiness" src="http://blog.colorbase.tw/wp-content/uploads/2010/05/html5_css3_readiness_thumb.jpg" border="0" alt="html5_css3_readiness" width="400" height="286" /></a></p>
<p><a href="http://html5readiness.com/" target="_blank">HTML &amp; CSS3 Reandiness</a></p>
<h2>HTML5 與  CSS3 現在最需要什麼？</h2>
<h3>良好的集成式開發環境</h3>
<p>我想對於開發人員而言，最需要的還是工具，因為純手工編製複雜的 Web 應用可真是一件吃力不討好的工作，但我相信只要有市場便不怕沒工具，之前 <a href="http://techcrunch.com/2010/05/05/adobe-cto-kevin-lynch-were-going-to-make-the-best-tools-in-the-world-for-html5/" target="_blank">Adobe CTO Kevin Lynch 也已經說要為HTML5開發工具</a>了，我也相信在公開的標準規範之下將會有更多軟體開發商投入精力創造出更好用的產品。</p>
<h3>廣泛的普及</h3>
<p>既然工具的問題排除了，那麼剩下的便是普及性的問題了，但很顯然的它們仍然還沒完全準備好，在 <a href="http://caniuse.com/" target="_blank">When can I use</a> 裡面列出了目前HTML5個主流瀏覽器的支援情況，雖然這是一個支援度比較表，但命名更像是在抱怨。</p>
<h2>幾種 HTML5 與 CSS3 支援度參考資料</h2>
<ul>
<li><a href="http://html5readiness.com/" target="_blank">HTML &amp; CSS3 Reandiness</a></li>
<li><a href="http://www.findmebyip.com/" target="_blank">findmebyIP</a></li>
<li><a href="http://caniuse.com/" target="_blank">When can I use</a></li>
<li><a href="http://www.quirksmode.org/css/contents.html" target="_blank">CSS contents and browser compatibility</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.colorbase.tw/web-development/1070/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>有趣的 jQuery 快速顯示隱藏元素技巧</title>
		<link>http://blog.colorbase.tw/web-development/1063</link>
		<comments>http://blog.colorbase.tw/web-development/1063#comments</comments>
		<pubDate>Fri, 14 May 2010 10:54:00 +0000</pubDate>
		<dc:creator>阿育</dc:creator>
				<category><![CDATA[Web開發]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://blog.colorbase.tw/?p=1063</guid>
		<description><![CDATA[今天在 Now you see me… show/hide performance 一文中，看到該文作者分析了各種jQuery顯示、隱藏的作法及其效能比較，最後還提到了一個非常有趣的好方法，他利用禁用、啟用&#60;style&#62;元素的方法來達到套用顯示、隱藏效果，在頁面中需要大量套用情況下效能特別好。
 
首先利用&#60;style&#62;來定義樣式為隱藏：

&#60;style id="special_hide"&#62;
	.special_hide {	display: none;}
&#60;/style&#62;


接著在將該&#60;style&#62;元素的disabled屬性設為true使其失去作用，也就是讓他變為顯示，例如jQuery中可以這麼寫：

 $('#special_hide').attr('disabled', true);  // 禁用指定&#60;style&#62;元素

 $('#special_hide').attr('disabled', false); // 啟用指定&#60;style&#62;元素

以下為完整的範例 

&#60;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&#62;
&#60;html&#62;
  &#60;head&#62;
    &#60;script class="jsbin" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"&#62;
	&#60;/script&#62;
	&#60;script type="text/javascript"&#62;
	$(function (){
		$('#disableBtn').click(function(){
			$('#special_hide').attr('disabled', true); // 禁用樣式
		});

		$('#enableBtn').click(function(){
			$('#special_hide').attr('disabled', false); // 啟用樣式
		});
	});
	&#60;/script&#62;

    &#60;title&#62;&#60;/title&#62;
    &#60;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&#62;
 ...]]></description>
			<content:encoded><![CDATA[<p>今天在 <a href="http://www.learningjquery.com/2010/05/now-you-see-me-showhide-performance" target="_blank">Now you see me… show/hide performance</a> 一文中，看到該文作者分析了各種jQuery顯示、隱藏的作法及其效能比較，最後還提到了一個非常有趣的好方法，他利用禁用、啟用&lt;style&gt;元素的方法來達到套用顯示、隱藏效果，在頁面中需要大量套用情況下效能特別好。</p>
<p> <span id="more-1063"></span>
<p>首先利用&lt;style&gt;來定義樣式為隱藏：</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:2b97de14-2bbc-4888-a074-0ef54270d1a9" class="wlWriterEditableSmartContent">
<pre name="code" class="css:nogutter">&lt;style id="special_hide"&gt;
	.special_hide {	display: none;}
&lt;/style&gt;</pre>
</div>
</p>
<p>接著在將該&lt;style&gt;元素的disabled屬性設為true使其失去作用，也就是讓他變為顯示，例如jQuery中可以這麼寫：</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:0e6e200a-0f52-4fa3-8de6-e8d85a9fa9fe" class="wlWriterEditableSmartContent">
<pre name="code" class="js:nogutter"> $('#special_hide').attr('disabled', true);  // 禁用指定&lt;style&gt;元素

 $('#special_hide').attr('disabled', false); // 啟用指定&lt;style&gt;元素</pre>
</div>
<p>以下為完整的範例 </p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:1c2d78d8-22b3-4899-9a96-86bb6fec761b" class="wlWriterEditableSmartContent">
<pre name="code" class="xml:nogutter">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;script class="jsbin" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"&gt;
	&lt;/script&gt;
	&lt;script type="text/javascript"&gt;
	$(function (){
		$('#disableBtn').click(function(){
			$('#special_hide').attr('disabled', true); // 禁用樣式
		});

		$('#enableBtn').click(function(){
			$('#special_hide').attr('disabled', false); // 啟用樣式
		});
	});
	&lt;/script&gt;

    &lt;title&gt;&lt;/title&gt;
    &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
    &lt;style id="special_hide"&gt;.special_hide { display: none; }&lt;/style&gt;
  &lt;/head&gt;
  &lt;body&gt;

    &lt;button id="disableBtn"&gt;取消樣式&lt;/button&gt;
    &lt;button id="enableBtn"&gt;啟用樣式&lt;/button&gt;

    &lt;div class="special_hide"&gt;這個元素預設會因為樣式而隱藏&lt;/div&gt;

  &lt;/body&gt;
&lt;/html&gt;</pre>
</div>
<p>執行範例：</p>
<p><iframe style="width: 100%; height: 300px" src="http://jsfiddle.net/PQuH6/embedded/"></iframe></p>
<h2>延伸思考</h2>
<p>透過禁用、啟用&lt;style&gt;元素的方法，不只可以應用在大量套用顯示、隱藏效果，其實很多效果都可以利用此方法來完成，特別是大量套用時，因為瀏覽器原生的CSS Selector解析，理論上總是會比jQuery Selector來的快。 </p>
</p>
<h2>參考文章</h2>
<ul>
<li><a href="http://www.learningjquery.com/2010/05/now-you-see-me-showhide-performance" target="_blank">Now you see me… show/hide performance</a> </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.colorbase.tw/web-development/1063/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Diigo &#8211; 書籤連結分享與知識共享的結合</title>
		<link>http://blog.colorbase.tw/resource/1049</link>
		<comments>http://blog.colorbase.tw/resource/1049#comments</comments>
		<pubDate>Tue, 11 May 2010 03:10:52 +0000</pubDate>
		<dc:creator>阿育</dc:creator>
				<category><![CDATA[知識管理]]></category>
		<category><![CDATA[網路資源]]></category>
		<category><![CDATA[diigo]]></category>
		<category><![CDATA[web-application]]></category>
		<category><![CDATA[網路服務]]></category>

		<guid isPermaLink="false">http://blog.colorbase.tw/?p=1049</guid>
		<description><![CDATA[Diigo 是一個 Social Bookmarking (社群書籤或稱社會性書籤)，它除了可以是個人的線上書籤，更可以是一種分享平台，而其分享的不只是書籤連結，更是一種知識共享，其功能之強大，著實讓我一用就愛上它，因為它幾乎把我已知對於書籤或閱讀的工具及方法全都整合在一起了。


Diigo 可以拿來做什麼？
簡單來說，它主要可成為：

研究與學習的輔助工具。
知識管理分享的平台。
以知識分享為基礎的社交平台。
個人線上知識管理工具。
個人線上書籤。

Diigo 具備什麼樣的功能及特色？

線上書籤分享
當書籤設為Public時。
線上個人書籤
當書籤設為Private時。
線上畫重點
當我們閱讀文章時，適時的畫重點可以幫助我們於日後再次複習時節省許多不必要的時間，如果你願意甚至可以將你的重點標記設置為Public，讓別人造訪該網頁時也能夠看到你所標記的重點。
給予網頁評論及備註
Diigo可以給予網頁備註及評論，也可以只針對我們所畫重點給予備註或評論，並且可以設定評論或備註的開放權限，如果要分享就可以設定為Public，如果別人的備註或評論我們有權限讀取時(例如對方設定為Public)，當我們在那之後閱讀該網頁時，就可以看到對方給予的備註或評論，甚至我們可以加入自己的備註作為補述或討論，因此Diigo所提供的不僅僅是一種線上網頁備註，更是一種開放性的交流、討論平台。
網頁快取
類似Google的庫存頁面，當我們加入書籤後Diigo會自動建立一份當時的快取，連收藏的動作它都幫我們做好了。
網頁快照
俗話說有圖有真相，Diigo能幫我們建立書籤時頁面的screenshot(螢幕截圖)並儲存在線上。
待讀清單
如果有一篇好文我們在當下沒有時間好好閱讀時，將可以利用此功能將它加入到待讀清單中，有時間再來好好閱讀。
書籤清單
Diigo的書籤管理方式完全採用Tag的方式，而此功能可視為一個特殊的分類方式，例如當我們正在研究某種東西的時候，我們可以為其建立一個書籤清單(List)，並再加入書籤時額外指定加入清單中，方便整理及回顧。
共享群組
共享群組(Group)可以視為一種特殊的共享方式，也可以視為一種特殊的分類方式，與List不同的是Group提供更多的共享與交流功能，例如，Group可以指定開放的權限，讓特定人士才能過閱讀這個共享群組，在這個群組中的成員將可以彼此分享、交流相似話題的書籤、評論等等。

如何使用 Diigo？
Diigo 在 User Experience 方面處理的相當好，除了可以特別註冊 Diigo帳號之外，也可以直接使用Google、Facebook、Twitter、Yahoo!的帳號註冊。對於其操作 Diigo也提供了簡易的影音教學。
安裝 Diigo 瀏覽器擴充功能
Diigo提供各種瀏覽器的擴充功能，透過對於瀏覽器額外的擴充可以把Diigo的功能完全發揮出來，因此建議如果要完全感受 Diigo的強大就一定要安裝官方提供的擴充功能。
怪不得我說 Diigo 的 User Experience 做的好，因為它的安裝方式很簡單，進入首頁後你將會看到一個很大的安裝鈕，這個安裝鈕會根據你所使用的瀏覽器而有所不同，例如使用Firefox瀏覽時將會看到：

而當使用Google Chrome瀏覽時將會看到：

安裝完之後，將會出現其功能列，例如：Firefox將會出現如下的Toolbar

安裝完瀏覽器擴充之後，不妨回來這個網頁看看，將會有很新奇的發現！
Diigo 操作及使用重點簡介
MyLibrary 就是自己收藏的書籤庫，下圖為 Web 介面，分為以下三種瀏覽模式，可依據需求於這三種模式下切換檢視。

緊實模式 (Compact Display)
瀏覽模式 (Best for Browsering)
管理模式 (Best for Edit or Manage)


加入書籤
Diigo提供許多加入書籤的方式，除了可透過 Toolbar 提供的功能，也可以使用Web介面的方式加入書籤收藏。在此只簡單介紹Toolbar的方式。
首先我們可以先選取網頁中的一段重點，並按下 Toolbar 中的 Bookmark，就會出現以下的對話視窗，此時在 Description 中將會自動加入我們選取的文字。
Diigo 的 Tag 是以 空白 區隔

這時候我們可以設定這個書籤是否為私有(Private），若設定(Unread)未讀則如同使用 Toolbar 上的 Read Later 一樣，也就是將書籤一併加入待讀清單中，之後就可以在Unread裡面閱讀這些待讀的書籤連結。
而如果勾選Snapshot則會一併將網頁快照拍下來成為一張圖片，儲存在線上。
另外還可以一併把這個書籤加入 Group ...]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.diigo.com" target="_blank">Diigo</a> 是一個 Social Bookmarking (社群書籤或稱社會性書籤)，它除了可以是個人的線上書籤，更可以是一種分享平台，而其分享的不只是書籤連結，更是一種知識共享，其功能之強大，著實讓我一用就愛上它，因為它幾乎把我已知對於書籤或閱讀的工具及方法全都整合在一起了。</p>
<p><span id="more-1049"></span></p>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/05/diigo.jpg"><img title="diigo" src="http://blog.colorbase.tw/wp-content/uploads/2010/05/diigo_thumb.jpg" border="0" alt="diigo" width="400" height="281" /></a></p>
<h2>Diigo 可以拿來做什麼？</h2>
<p>簡單來說，它主要可成為：</p>
<ul>
<li>研究與學習的輔助工具。</li>
<li>知識管理分享的平台。</li>
<li>以知識分享為基礎的社交平台。</li>
<li>個人線上知識管理工具。</li>
<li>個人線上書籤。</li>
</ul>
<h2>Diigo 具備什麼樣的功能及特色？</h2>
<ul>
<li><strong><span style="color: #800000;">線上書籤分享</span><br />
</strong>當書籤設為Public時。</li>
<li><span style="color: #800000;"><strong>線上個人書籤</strong><br />
</span>當書籤設為Private時。</li>
<li><strong><span style="color: #800000;">線上畫重點</span><br />
</strong>當我們閱讀文章時，適時的畫重點可以幫助我們於日後再次複習時節省許多不必要的時間，如果你願意甚至可以將你的重點標記設置為Public，<strong>讓別人造訪該網頁時也能夠看到你所標記的重點</strong>。</li>
<li><strong><span style="color: #800000;">給予網頁評論及備註</span><br />
</strong>Diigo可以給予網頁備註及評論，也可以只針對我們所畫重點給予備註或評論，並且可以設定評論或備註的開放權限，如果要分享就可以設定為Public，如果別人的備註或評論我們有權限讀取時(例如對方設定為Public)，當我們在那之後閱讀該網頁時，就可以看到對方給予的備註或評論，甚至我們可以加入自己的備註作為補述或討論，因此<strong>Diigo所提供的不僅僅是一種線上網頁備註，更是一種開放性的交流、討論平台</strong>。</li>
<li><strong><span style="color: #800000;">網頁快取<br />
</span></strong>類似Google的庫存頁面，<strong>當我們加入書籤後Diigo會自動建立一份當時的快取，連收藏的動作它都幫我們做好了</strong>。</li>
<li><strong><span style="color: #800000;">網頁快照</span><br />
</strong>俗話說有圖有真相，Diigo能幫我們建立書籤時頁面的screenshot(螢幕截圖)並儲存在線上。</li>
<li><span style="color: #800000;"><strong>待讀清單</strong><br />
</span>如果有一篇好文我們在當下沒有時間好好閱讀時，將可以利用此功能將它加入到待讀清單中，有時間再來好好閱讀。</li>
<li><span style="color: #800000;"><strong>書籤清單</strong><br />
</span>Diigo的書籤管理方式完全採用<a href="http://blog.colorbase.tw/knowledge-management/987" target="_blank">Tag</a>的方式，而此功能可視為一個特殊的分類方式，例如當我們正在研究某種東西的時候，我們可以為其建立一個書籤清單(List)，並再加入書籤時額外指定加入清單中，方便整理及回顧。</li>
<li><strong><span style="color: #800000;">共享群組</span></strong><br />
共享群組(Group)可以視為一種特殊的共享方式，也可以視為一種特殊的分類方式，與List不同的是Group提供更多的共享與交流功能，例如，Group可以指定開放的權限，讓特定人士才能過閱讀這個共享群組，<strong>在這個群組中的成員將可以彼此分享、交流相似話題的書籤、評論等等</strong>。</li>
</ul>
<h2>如何使用 Diigo？</h2>
<p>Diigo 在 User Experience 方面處理的相當好，除了可以特別註冊 Diigo帳號之外，也可以直接使用Google、Facebook、Twitter、Yahoo!的帳號註冊。對於其操作 Diigo也提供了<a href="http://www.diigo.com/learn_more/" target="_blank">簡易的影音教學</a>。</p>
<h2>安裝 Diigo 瀏覽器擴充功能</h2>
<p>Diigo提供各種瀏覽器的擴充功能，透過對於瀏覽器額外的擴充可以把Diigo的功能完全發揮出來，因此建議如果要完全感受 Diigo的強大就一定要安裝官方提供的擴充功能。</p>
<p>怪不得我說 Diigo 的 User Experience 做的好，因為它的安裝方式很簡單，進入首頁後你將會看到一個很大的安裝鈕，這個安裝鈕會根據你所使用的瀏覽器而有所不同，例如使用Firefox瀏覽時將會看到：</p>
<p><img style="display: inline; border-width: 0px;" title="install_diigo_toolbar" src="http://blog.colorbase.tw/wp-content/uploads/2010/05/install_diigo_toolbar.jpg" border="0" alt="install_diigo_toolbar" width="208" height="56" /></p>
<p>而當使用Google Chrome瀏覽時將會看到：</p>
<p><img style="display: inline; border-width: 0px;" title="install_chrome_extension" src="http://blog.colorbase.tw/wp-content/uploads/2010/05/install_chrome_extension.jpg" border="0" alt="install_chrome_extension" width="244" height="57" /></p>
<p>安裝完之後，將會出現其功能列，例如：Firefox將會出現如下的Toolbar</p>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/05/toolbar.jpg"><img style="display: inline; border-width: 0px;" title="toolbar" src="http://blog.colorbase.tw/wp-content/uploads/2010/05/toolbar_thumb.jpg" border="0" alt="toolbar" width="640" height="17" /></a></p>
<p class="tip">安裝完瀏覽器擴充之後，不妨回來這個網頁看看，將會有很新奇的發現！</p>
<h2>Diigo 操作及使用重點簡介</h2>
<p>MyLibrary 就是自己收藏的書籤庫，下圖為 Web 介面，分為以下三種瀏覽模式，可依據需求於這三種模式下切換檢視。</p>
<ul>
<li>緊實模式 (Compact Display)</li>
<li>瀏覽模式 (Best for Browsering)</li>
<li>管理模式 (Best for Edit or Manage)</li>
</ul>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/05/MyLibrary_1273534731143.gif"><img style="display: inline; border-width: 0px;" title="My-Library_1273534731143" src="http://blog.colorbase.tw/wp-content/uploads/2010/05/MyLibrary_1273534731143_thumb.gif" border="0" alt="My-Library_1273534731143" width="400" height="188" /></a></p>
<h3>加入書籤</h3>
<p>Diigo提供許多加入書籤的方式，除了可透過 Toolbar 提供的功能，也可以使用Web介面的方式加入書籤收藏。在此只簡單介紹Toolbar的方式。</p>
<p>首先我們可以先選取網頁中的一段重點，並按下 Toolbar 中的 Bookmark，就會出現以下的對話視窗，此時在 Description 中將會自動加入我們選取的文字。</p>
<p class="tip">Diigo 的 Tag 是以 <strong>空白</strong> 區隔</p>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/05/add_bookmark_to_diigo.jpg"><img style="display: inline; border-width: 0px;" title="add_bookmark_to_diigo" src="http://blog.colorbase.tw/wp-content/uploads/2010/05/add_bookmark_to_diigo_thumb.jpg" border="0" alt="add_bookmark_to_diigo" width="400" height="481" /></a></p>
<p>這時候我們可以設定這個書籤是否為私有(Private），若設定(Unread)未讀則如同使用 Toolbar 上的 Read Later 一樣，也就是將書籤一併加入待讀清單中，之後就可以在Unread裡面閱讀這些待讀的書籤連結。</p>
<p>而如果勾選Snapshot則會一併將網頁快照拍下來成為一張圖片，儲存在線上。</p>
<p>另外還可以一併把這個書籤加入 Group 或 List 中。</p>
<h3>為網頁畫重點及給予備註</h3>
<p>在備註方面 Diigo 提供兩種備註方式：</p>
<ul>
<li>網頁的備註</li>
<li>浮動式的備註</li>
<li>重點的備註 (針對標記為重點的備註)</li>
</ul>
<p class="tip"><strong>注意！</strong><br />
這個功能一定要安裝瀏覽器擴充，而畫完重點或加入備註後，當我們再次回到這個網頁時，這些東西將會自動再次顯示。</p>
<p>畫重點的方式很簡單，只需選取要畫重點的文字。</p>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/05/diigo_highlight_01.jpg"><img style="display: inline; border: 0px;" title="diigo_highlight_01" src="http://blog.colorbase.tw/wp-content/uploads/2010/05/diigo_highlight_01_thumb.jpg" border="0" alt="diigo_highlight_01" width="640" height="83" /></a></p>
<p>接著按下Toolbar或者右鍵功能表的 Highlight 即可標註重點成為如下圖：</p>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/05/diigo_highlight_02.jpg"><img style="display: inline; border: 0px;" title="diigo_highlight_02" src="http://blog.colorbase.tw/wp-content/uploads/2010/05/diigo_highlight_02_thumb.jpg" border="0" alt="diigo_highlight_02" width="640" height="101" /></a></p>
<p>此時我們可以將滑鼠移動到標記重點的上方，將會顯示功能鈕，按下並選擇 Add sticky note即可對該重點加以備註。</p>
<p><img style="display: inline; border: 0px;" title="diigo_highlight_add_note" src="http://blog.colorbase.tw/wp-content/uploads/2010/05/diigo_highlight_add_note.jpg" border="0" alt="diigo_highlight_add_note" width="241" height="123" /></p>
<p>下圖為備註編輯視窗：</p>
<p><img style="display: inline; border: 0px;" title="diigo_note_editor" src="http://blog.colorbase.tw/wp-content/uploads/2010/05/diigo_note_editor.jpg" border="0" alt="diigo_note_editor" width="399" height="155" /></p>
<p>加上備註之後，將會發現該重點的前面多出了一個小圖示，下圖表示目前該重點有一個備註。</p>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/05/diigo_note2.jpg"><img style="display: inline; border: 0px;" title="diigo_note2" src="http://blog.colorbase.tw/wp-content/uploads/2010/05/diigo_note2_thumb.jpg" border="0" alt="diigo_note2" width="640" height="85" /></a></p>
<p>點選備註小圖示之後，將可顯示備註，此時可再次加入備註，由於我設定為Public，因此別人也可以來加以補充備註或形成討論。</p>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/05/diigo_note.jpg"><img style="display: inline; border: 0px;" title="diigo_note" src="http://blog.colorbase.tw/wp-content/uploads/2010/05/diigo_note_thumb.jpg" border="0" alt="diigo_note" width="398" height="193" /></a></p>
<p>而至於浮動式的網頁備註加入的方法為按下Toolbar上的Comment來加入，例如下圖為Diigo官方的浮動式備註截圖：</p>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/05/diigo_page_note.jpg"><img style="display: inline; border: 0px;" title="diigo_page_note" src="http://blog.colorbase.tw/wp-content/uploads/2010/05/diigo_page_note_thumb.jpg" border="0" alt="diigo_page_note" width="464" height="391" /></a></p>
<h3>書籤的關聯性篩選</h3>
<p>我在之前的文章「<a href="http://blog.colorbase.tw/knowledge-management/987" target="_blank">再談談Tag的知識關聯性與軟體操作設計</a>」中曾經提及書籤關連性操作的好處，Diigo當然有提供這樣的功能，只是操作方式不太一樣而已。</p>
<p>首先必須選擇或輸入主 Tag，之後Diigo會顯示關連的 Tag，按下「+」之後就會加入該Tag並與之前的Tag做AND過濾。</p>
<p><img style="display: inline; border: 0px;" title="related_tags" src="http://blog.colorbase.tw/wp-content/uploads/2010/05/related_tags.jpg" border="0" alt="related_tags" width="248" height="228" /></p>
<h3>網頁快取與快照</h3>
<p>在加入書籤的時候，Diigo或自動建立一份當時的網頁快照，若勾選Snapshot則將會一併建立一份網頁快照(網頁截圖)，例如下圖為包含網頁截圖的書籤，按下Preview可快速瀏覽快取。</p>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/05/snapshot.jpg"><img style="display: inline; border: 0px;" title="snapshot" src="http://blog.colorbase.tw/wp-content/uploads/2010/05/snapshot_thumb.jpg" border="0" alt="snapshot" width="487" height="77" /></a></p>
<p>點選Snapshot即可檢視網頁快取及快照。</p>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/05/snapshot_screenshot.jpg"><img style="display: inline; border: 0px;" title="snapshot_screenshot" src="http://blog.colorbase.tw/wp-content/uploads/2010/05/snapshot_screenshot_thumb.jpg" border="0" alt="snapshot_screenshot" width="400" height="226" /></a></p>
<h3>關於 Group 的通知功能</h3>
<p>當有人分享書籤到Gorup時，其成員將會自動收到E-Mail通知。</p>
<p>通知方式預設為立即，如果不想要整天收到通知信，可根據自己的需求調整，甚至我們可以設定為不使用E-Mail通知，而使用其提供的RSS feed以Google Reader之類的閱讀器訂閱。</p>
<ul>
<li>Immediately (立即)</li>
<li>Daily (每天)</li>
<li>Weekly (每週)</li>
<li>Not subscribed (不訂閱通知)</li>
</ul>
<h2>相關連結</h2>
<ul>
<li><a href="http://www.diigo.com" target="_blank">Diigo官方網站</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.colorbase.tw/resource/1049/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>兩款用於開發 iPhone Web 應用的 UI Framework</title>
		<link>http://blog.colorbase.tw/web-development/1010</link>
		<comments>http://blog.colorbase.tw/web-development/1010#comments</comments>
		<pubDate>Wed, 05 May 2010 10:42:04 +0000</pubDate>
		<dc:creator>阿育</dc:creator>
				<category><![CDATA[Web開發]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://blog.colorbase.tw/web-development/1010</guid>
		<description><![CDATA[最近在雜誌上看到了關於手機平台開發的專欄，裡面提到了手機平台Web上很難做出如同本機應用程式所能做出的使用者體驗(User experience)，雖然這是事實，但透過Framework的輔助多少可降低難度及開發成本。
 

iUI: iPhone User Interface Framework

為iPhone Web UI提供完整的解決方案，只需利用Javascript與標準的HTML就能開發出長得很像iPhone應用程式的Web應用。
網址：http://code.google.com/p/iui/
概觀：http://www.k10design.net/articles/iui/
範例：http://www.k10design.net/articles/iui/demo/
jQTouch

這是一個jQuery Plugin，如果熟悉jQuery的話是個不錯的選擇。
網址：http://www.jqtouch.com/
範例：http://www.jqtouch.com/preview/demos/main/
]]></description>
			<content:encoded><![CDATA[<p>最近在雜誌上看到了關於手機平台開發的專欄，裡面提到了手機平台Web上很難做出如同本機應用程式所能做出的使用者體驗(User experience)，雖然這是事實，但透過Framework的輔助多少可降低難度及開發成本。</p>
<p> <span id="more-1010"></span>
</p>
<h2>iUI: iPhone User Interface Framework</h2>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/05/image.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.colorbase.tw/wp-content/uploads/2010/05/image_thumb.png" width="400" height="319" /></a></p>
<p>為iPhone Web UI提供完整的解決方案，只需利用Javascript與標準的HTML就能開發出長得很像iPhone應用程式的Web應用。</p>
<p>網址：<a title="http://code.google.com/p/iui/" href="http://code.google.com/p/iui/">http://code.google.com/p/iui/</a></p>
<p>概觀：<a title="http://www.k10design.net/articles/iui/" href="http://www.k10design.net/articles/iui/">http://www.k10design.net/articles/iui/</a></p>
<p>範例：<a title="http://www.k10design.net/articles/iui/demo/" href="http://www.k10design.net/articles/iui/demo/">http://www.k10design.net/articles/iui/demo/</a></p>
<h2>jQTouch</h2>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/05/image1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.colorbase.tw/wp-content/uploads/2010/05/image_thumb1.png" width="400" height="234" /></a></p>
<p>這是一個jQuery Plugin，如果熟悉jQuery的話是個不錯的選擇。</p>
<p>網址：<a title="http://www.jqtouch.com/" href="http://www.jqtouch.com/">http://www.jqtouch.com/</a></p>
<p>範例：<a title="http://www.jqtouch.com/preview/demos/main/" href="http://www.jqtouch.com/preview/demos/main/">http://www.jqtouch.com/preview/demos/main/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.colorbase.tw/web-development/1010/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>再談談Tag的知識關聯性與軟體操作設計</title>
		<link>http://blog.colorbase.tw/knowledge-management/987</link>
		<comments>http://blog.colorbase.tw/knowledge-management/987#comments</comments>
		<pubDate>Thu, 29 Apr 2010 15:53:00 +0000</pubDate>
		<dc:creator>阿育</dc:creator>
				<category><![CDATA[知識管理]]></category>
		<category><![CDATA[thinking]]></category>
		<category><![CDATA[軟體設計]]></category>

		<guid isPermaLink="false">http://blog.colorbase.tw/knowledge-management/987</guid>
		<description><![CDATA[Tag是伴隨著Web2.0而生的一個產物。因為Tag的多變化以及完整的定義性讓我自從認同了Tag所具備的價值之後我便愛上這種定義方式， 因為它除了可以幫助我們歸納整理知識或資料之外，還能夠幫助我們了解某個事物所在領域。

Tag Cloud
Tag的應用概念中最廣為人之的就是 Tag cloud (標籤雲)，它以出現的次數來賦予Tag權重，藉此來區分出Tag的重要性程度，越重要的Tag 字級就會越大。
透過Tag cloud我們可以很清楚的知道某個事物所代表的含意，例如：一個部落格的Tag Cloud可以顯示出該部落格文章的方向，如果把它用在人身上就可以知道這個人所接觸的領域落在什麼樣區塊，以及其所佔的程度比例。
例如 Wordle 可以透過手動輸入或其他上傳方式來產生屬於自己的Tag Cloud，如果你看到一張名片上印著那個人的Tag Cloud，那麼你是不是在短短的幾秒鐘就能清楚的了解到這個人所接觸的領域範圍呢？事實上我真的曾經把類似這樣的東西印成個人的名片，因為我覺得這總比告訴人家：我是工程師、我是廚師、我是音樂家之類的名稱來的更具體，因為不管哪一種職業，遇到對方對這個行業有一定的認知時，他第二句話很可能就會再問：「是哪方面的(工程師、廚師、音樂家)？」但透過Tag cloud的方式，千言萬語都比不過一張小小的圖，而且只需幾秒鐘的時間就能讓對方清楚了解。

Tag的關聯網路
當我們定義了數量非常龐大的Tag之後，我們將會很明顯的感受到一件事情，這些Tag並不會全部都是獨立的存在，它們彼此之間是會有關連性而且並不會全部都有關連，因為有些東西壓根扯不上邊。
若把它們依據關連性繪製成一張圖，將會形成一個獨特的Tag關連網路，這樣的網路結構不僅僅指出定義者所關注的事物，也表明了這些Tag彼此的關聯性，如下圖所示。

而在數量的增大同時會帶來另一個問題，因為Tag的雜亂將會帶給我們很大的困擾，即使有了Tag我們一樣很難找到自己所定義過的Tag，但如果軟體能夠透過這樣的關聯性以及排斥性幫我們加以篩選Tag的關聯性，這將會成為一種非常方便好用的Tag檢索方式。
在之前的另一篇文章：談談Tag用於知識管理與軟體操作設計 中我談到了：
理想中的Tag應該具備AND(且)及OR(或)的概念，以方便我們快速的檢索及篩選所需要的內容，它應該具備針對Tag本身的過濾性。
最近我發現有兩種軟體除了具備了Tag過濾性也同時具備了Tag的關聯性的功能，雖然使用它們已經有很長的一段時間了，但我是直到最近才真正體會到它們設計上的概念，我想我應該修正之前說過的話，真正理想的Tag管理應該是：
能結合Tag之間的關連性與Tag的過濾性。
這兩種軟體都是 Firefox addon ，它們都具備了Tag關連性與過濾性的操作：
TagSieve
前身是 TagSifter 用於加強 Firefox 書籤管理功能，讓Tag真正發揮效用。
Zetero
一套非常強悍的知識管理與文獻收集軟體。
以TagSieve舉例來說，當我們定義了四個書籤的Tag分別為：
書籤一：jquery, plugin, bubble
書籤二：jquery, tutorial, bubble
書籤三：jquery, plugin, menu
書籤四：photoshop, logo, tutorial
首先在關連性的Tag管理操作中，我們必須先輸入一個或選擇一個主要的Tag，例如，當我們選擇了jquery時，有哪幾個Tag與他有關連呢？答案是：
plugin, tutorial, bubble, menu
這裡我們可以看出，有兩個Tag與jquery是完全扯不上邊的：
photoshop, logo
接著我們將會只剩下有關連的那四個Tag可以選擇，這樣是不是大大的減少操作上的視覺負擔及操作速度呢？
再接著我們如果又從剩下的四個Tag中點選了例如：tutorial，那將會只剩下：
bubble
到了這裡，我們已經選擇了兩個Tag
jquery, tutorial
以這樣的關聯性Tag選取方式，加上Tag的過濾性來說，如果以AND的方式來做過濾，將會剩下哪幾種書籤呢？答案將會只剩下：
書籤二：jquery, tutorial, bubble
仔細想想，當在內容或知識的龐大且Tag數量也相當龐大時，這樣的操作方式是不是會為我們日後的管理或回顧帶來相當大的便利呢？
TagSieve 實際Tag篩選操作畫面
一開始有非常多的Tag及201個書籤。

點選了jquery，只剩下74個書籤，因為只保留關連的Tag，因此去除了許多不必要的Tag，這樣也讓我們很容易的了解到jquery這個Tag與什麼樣的Tag有所關連。

從剩下的Tag中，再點選plugin，於是軟體自動再次篩選關連的Tag與符合條件的文章，因此剩下更少的Tag與60個符合條件的書籤。

最終再點選bubble，只剩下10個書籤，如果再搭配關鍵字搜尋將可以更快更精確的找到我們所需的東西。

結論與感想
軟體介面的設計經過一代又一代不斷的改革、改進，一直趨近於對使用者最為友善的方式，各個領域的專家一直不斷在思考、創造，最友善最易用的操作方式。
從Tag cloud所呈現出的意義中我得到了一個延伸的啟示，不論我們在設計軟體介面或Web介面時，有一個很值得思考的關鍵點就是：
一個好的介面設計應該要能夠在最短時間讓受者清楚的了解我們想要呈現的是什麼。
電腦的發明不是在增加我們的工作負擔，當我們身為使用者時，我們可以多多了解各種操作對於我們的幫助以增進使用電腦的效率，而當我們身為開發者時，應該多多注意別人有什麼樣的好的介面設計構想，並進一步思考它且加以改善、整合，相信最終定能對我們所開發的軟體有正面的附加價值。
相關連結

Wordle
TagSieve
Zetero

]]></description>
			<content:encoded><![CDATA[<p>Tag是伴隨著Web2.0而生的一個產物。因為Tag的多變化以及完整的定義性讓我自從認同了Tag所具備的價值之後我便愛上這種定義方式， 因為它除了可以幫助我們歸納整理知識或資料之外，還能夠幫助我們了解某個事物所在領域。</p>
<p><span id="more-987"></span></p>
<h2>Tag Cloud</h2>
<p>Tag的應用概念中最廣為人之的就是 Tag cloud (標籤雲)，它以出現的次數來賦予Tag權重，藉此來區分出Tag的重要性程度，越重要的Tag 字級就會越大。</p>
<p>透過Tag cloud我們可以很清楚的知道某個事物所代表的含意，例如：一個部落格的Tag Cloud可以顯示出該部落格文章的方向，如果把它用在人身上就可以知道這個人所接觸的領域落在什麼樣區塊，以及其所佔的程度比例。</p>
<p>例如 <a href="http://www.wordle.net/" target="_blank">Wordle</a> 可以透過手動輸入或其他上傳方式來產生屬於自己的Tag Cloud，如果你看到一張名片上印著那個人的Tag Cloud，那麼你是不是在短短的幾秒鐘就能清楚的了解到這個人所接觸的領域範圍呢？事實上我真的曾經把類似這樣的東西印成個人的名片，因為我覺得這總比告訴人家：我是工程師、我是廚師、我是音樂家之類的名稱來的更具體，因為不管哪一種職業，遇到對方對這個行業有一定的認知時，他第二句話很可能就會再問：「是哪方面的(工程師、廚師、音樂家)？」但透過Tag cloud的方式，千言萬語都比不過一張小小的圖，而且只需幾秒鐘的時間就能讓對方清楚了解。</p>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/04/tagcloud2.jpg"><img style="display: inline; border-width: 0px;" title="tag-cloud-2" src="http://blog.colorbase.tw/wp-content/uploads/2010/04/tagcloud2_thumb.jpg" border="0" alt="tag-cloud-2" width="400" height="253" /></a></p>
<h2>Tag的關聯網路</h2>
<p>當我們定義了數量非常龐大的Tag之後，我們將會很明顯的感受到一件事情，這些Tag並不會全部都是獨立的存在，<strong>它們彼此之間是會有關連性而且並不會全部都有關連</strong>，因為有些東西壓根扯不上邊。</p>
<p>若把它們依據關連性繪製成一張圖，將會形成一個獨特的Tag關連網路，這樣的網路結構不僅僅指出定義者所關注的事物，也表明了這些Tag彼此的關聯性，如下圖所示。</p>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/04/tagrelationship.jpg"><img style="display: inline; border-width: 0px;" title="tag-relationship" src="http://blog.colorbase.tw/wp-content/uploads/2010/04/tagrelationship_thumb.jpg" border="0" alt="tag-relationship" width="400" height="292" /></a></p>
<p>而在數量的增大同時會帶來另一個問題，因為Tag的雜亂將會帶給我們很大的困擾，即使有了Tag我們一樣很難找到自己所定義過的Tag，但如果軟體能夠透過這樣的關聯性以及排斥性幫我們加以篩選Tag的關聯性，這將會成為一種非常方便好用的Tag檢索方式。</p>
<p>在之前的另一篇文章：<a href="/knowledge-management/846" target="_blank">談談Tag用於知識管理與軟體操作設計</a> 中我談到了：</p>
<blockquote><p>理想中的Tag應該具備AND(且)及OR(或)的概念，以方便我們快速的檢索及篩選所需要的內容，它應該具備針對Tag本身的過濾性。</p></blockquote>
<p>最近我發現有兩種軟體除了具備了<strong>Tag過濾性</strong>也同時具備了<strong>Tag的關聯性</strong>的功能，雖然使用它們已經有很長的一段時間了，但我是直到最近才真正體會到它們設計上的概念，我想我應該修正之前說過的話，真正理想的Tag管理應該是：</p>
<p><strong>能結合Tag之間的關連性與Tag的過濾性。</strong></p>
<p>這兩種軟體都是 Firefox addon ，它們都具備了<strong>Tag關連性與過濾性的操作</strong>：</p>
<h3><a href="http://www.grue.in/tagsieve/" target="_blank">TagSieve</a></h3>
<p>前身是 TagSifter 用於加強 Firefox <strong>書籤管理</strong>功能，讓Tag真正發揮效用。</p>
<h3><a href="http://www.zotero.org/" target="_blank">Zetero</a></h3>
<p>一套非常強悍的<strong>知識管理</strong>與<strong>文獻收集</strong>軟體。</p>
<p>以TagSieve舉例來說，當我們定義了四個書籤的Tag分別為：</p>
<p class="tip">書籤一：jquery, plugin, bubble</p>
<p class="tip">書籤二：jquery, tutorial, bubble</p>
<p class="tip">書籤三：jquery, plugin, menu</p>
<p class="tip">書籤四：photoshop, logo, tutorial</p>
<p>首先在關連性的Tag管理操作中，我們必須先輸入一個或選擇一個主要的Tag，例如，當我們選擇了jquery時，有哪幾個Tag與他有關連呢？答案是：</p>
<p class="tip">plugin, tutorial, bubble, menu</p>
<p>這裡我們可以看出，有兩個Tag與jquery是完全扯不上邊的：</p>
<p class="tip">photoshop, logo</p>
<p>接著我們將會只剩下有關連的那四個Tag可以選擇，這樣是不是大大的減少操作上的視覺負擔及操作速度呢？</p>
<p>再接著我們如果又從剩下的四個Tag中點選了例如：tutorial，那將會只剩下：</p>
<p class="tip">bubble</p>
<p>到了這裡，我們已經選擇了兩個Tag</p>
<p class="tip">jquery, tutorial</p>
<p>以這樣的關聯性Tag選取方式，加上Tag的過濾性來說，如果以AND的方式來做過濾，將會剩下哪幾種書籤呢？答案將會只剩下：</p>
<p class="tip">書籤二：jquery, tutorial, bubble</p>
<p>仔細想想，當在內容或知識的龐大且Tag數量也相當龐大時，這樣的操作方式是不是會為我們日後的管理或回顧帶來相當大的便利呢？</p>
<h2>TagSieve 實際Tag篩選操作畫面</h2>
<p>一開始有非常多的Tag及201個書籤。</p>
<p><img style="display: inline; border-width: 0px;" title="image" src="http://blog.colorbase.tw/wp-content/uploads/2010/04/image21.png" border="0" alt="image" width="340" height="320" /></p>
<p>點選了jquery，只剩下74個書籤，因為只保留關連的Tag，因此去除了許多不必要的Tag，這樣也讓我們很容易的了解到jquery這個Tag與什麼樣的Tag有所關連。</p>
<p><img style="display: inline; border-width: 0px;" title="image" src="http://blog.colorbase.tw/wp-content/uploads/2010/04/image22.png" border="0" alt="image" width="343" height="334" /></p>
<p>從剩下的Tag中，再點選plugin，於是軟體自動再次篩選關連的Tag與符合條件的文章，因此剩下更少的Tag與60個符合條件的書籤。</p>
<p><img style="display: inline; border-width: 0px;" title="image" src="http://blog.colorbase.tw/wp-content/uploads/2010/04/image23.png" border="0" alt="image" width="343" height="334" /></p>
<p>最終再點選bubble，只剩下10個書籤，如果再搭配關鍵字搜尋將可以更快更精確的找到我們所需的東西。</p>
<p><img style="display: inline; border-width: 0px;" title="image" src="http://blog.colorbase.tw/wp-content/uploads/2010/04/image24.png" border="0" alt="image" width="343" height="91" /></p>
<h2>結論與感想</h2>
<p>軟體介面的設計經過一代又一代不斷的改革、改進，一直趨近於對使用者最為友善的方式，各個領域的專家一直不斷在思考、創造，最友善最易用的操作方式。</p>
<p>從Tag cloud所呈現出的意義中我得到了一個延伸的啟示，不論我們在設計軟體介面或Web介面時，有一個很值得思考的關鍵點就是：</p>
<p class="tip"><span style="font-family: Lucida Sans Unicode;">一個好的介面設計應該要能夠在最短時間讓受者清楚的了解我們想要呈現的是什麼。</span></p>
<p><strong>電腦的發明不是在增加我們的工作負擔</strong>，當我們身為使用者時，我們可以多多了解各種操作對於我們的幫助以增進使用電腦的效率，而當我們身為開發者時，應該多多注意別人有什麼樣的好的介面設計構想，並進一步思考它且加以改善、整合，相信最終定能對我們所開發的軟體有正面的附加價值。</p>
<h2>相關連結</h2>
<ul>
<li><a href="http://www.wordle.net/" target="_blank">Wordle</a></li>
<li><a href="http://www.grue.in/tagsieve/" target="_blank">TagSieve</a></li>
<li><a href="http://www.zotero.org/" target="_blank">Zetero</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.colorbase.tw/knowledge-management/987/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>開始HTML5 &#8211; Video</title>
		<link>http://blog.colorbase.tw/web-development/947</link>
		<comments>http://blog.colorbase.tw/web-development/947#comments</comments>
		<pubDate>Tue, 27 Apr 2010 10:04:44 +0000</pubDate>
		<dc:creator>阿育</dc:creator>
				<category><![CDATA[Web開發]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[js-api]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://blog.colorbase.tw/?p=947</guid>
		<description><![CDATA[在HTML5以前若我們要在網頁中播放影片時，需要使用ActiveX或Plug-in的方式來達到，例如：Flash Player、QuickTime等等，但在HTML5之後這些東西成了標準，我們不需再透過額外的外掛來達成，相信這也意味著Web的相關應用將更趨於豐富化。
現在就連 YouTube 也已經測試使用HTML5的Video來做為影片播放介面，因此在實際應用上雖然我們並不一定要走在時代的尖端，但了解一下新技術是有其必要的。
 
&#160; 
HTML 5&#160; Video 基礎
基本的 HTML5 Video 標記如下，我們可以透過 src 屬性來標明影片的URL：

&#60;video src=影片URL &#62;很抱歉！您的瀏覽器不支援HTML5 Video&#60;/video&#62;

雖然上面的方式很簡短，但可惜的是因為目前各家瀏覽器在HTML5 Video的影片格式方面支援不一致，而導致我們若我們想要影片能夠兼容各種主流瀏覽器，我們必須提供這兩種主要的HTML5 Video 格式的影片檔案：

Theora/Vorbis (*.ogg ; *.ogv) 
H.264 / AAC (*.mp4 ; *.m4v) 

所以我們必須提供兩種格式讓瀏覽器自行依照自己支援的格式下載並播放，因此我們加入 &#60;source&#62; 來定義多個影片來源，而不是用 &#60;video&#62; 的 src 屬性，例如：

&#60;video&#62;
	&#60;source src="video.ogg"&#62;
	&#60;source src="video.m4v"&#62;
	很抱歉！您的瀏覽器不支援HTML5 Video
&#60;/video&#62;

&#60;video&#62; 的屬性
&#60;video&#62; 除了可以使用 src 屬性來標明影片的URL，我們還可以使用其他的屬性來定義 &#60;video&#62; 的基本樣式或行為。
src 
影片的URL。
autoplay
影片是否自動播放，預設為 false。
controls
是否顯示播放控制列，若設定為ture將會顯示播放控制列，這個控制器的樣式是依據瀏覽器而定的，預設為 false。
width
&#60;video&#62; 所佔寬度。
height 
&#60;video&#62; 所佔高度。
poster 
這如同一些以Flash實現的播放器所提供的「預覽圖」功能一樣，可於此指定預覽圖的URL，當影片尚未開始播放時，將會先顯示這裡所指定的圖片。
其他的屬性
&#60;video&#62;的屬性還有 loopend / loopstart ...]]></description>
			<content:encoded><![CDATA[<p>在HTML5以前若我們要在網頁中播放影片時，需要使用ActiveX或Plug-in的方式來達到，例如：Flash Player、QuickTime等等，但在HTML5之後這些東西成了標準，我們不需再透過額外的外掛來達成，相信這也意味著<strong>Web的相關應用將更趨於豐富化</strong>。</p>
<p>現在就連 YouTube 也已經測試使用HTML5的Video來做為影片播放介面，因此在實際應用上雖然我們並不一定要走在時代的尖端，但了解一下新技術是有其必要的。</p>
<p> <span id="more-947"></span>
<p>&#160;<img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="html5_video" border="0" alt="html5_video" src="http://blog.colorbase.tw/wp-content/uploads/2010/04/html5_video.png" width="400" height="286" /> </p>
<h2>HTML 5&#160; Video 基礎</h2>
<p>基本的 HTML5 Video 標記如下，我們可以透過 src 屬性來標明影片的URL：</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:c994902f-36ec-4339-ad1b-0e0c875499c5" class="wlWriterEditableSmartContent">
<pre name="code" class="xml:nogutter">&lt;video src=影片URL &gt;很抱歉！您的瀏覽器不支援HTML5 Video&lt;/video&gt;</pre>
</div>
<p>雖然上面的方式很簡短，但可惜的是因為目前各家瀏覽器在HTML5 Video的影片格式方面支援不一致，而導致我們若我們想要影片能夠兼容各種主流瀏覽器，我們必須提供這兩種主要的HTML5 Video 格式的影片檔案：</p>
<ul>
<li>Theora/Vorbis (*.ogg ; *.ogv) </li>
<li>H.264 / AAC (*.mp4 ; *.m4v) </li>
</ul>
<p>所以我們必須提供兩種格式讓瀏覽器自行依照自己支援的格式下載並播放，因此我們加入 &lt;source&gt; 來定義多個影片來源，而不是用 &lt;video&gt; 的 src 屬性，例如：</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:505dffee-a680-4820-aabc-364dee087a86" class="wlWriterEditableSmartContent">
<pre name="code" class="vb:nogutter">&lt;video&gt;
	&lt;source src="video.ogg"&gt;
	&lt;source src="video.m4v"&gt;
	很抱歉！您的瀏覽器不支援HTML5 Video
&lt;/video&gt;</pre>
</div>
<h2>&lt;video&gt; 的屬性</h2>
<p>&lt;video&gt; 除了可以使用 src 屬性來標明影片的URL，我們還可以使用其他的屬性來定義 &lt;video&gt; 的基本樣式或行為。</p>
<h3>src </h3>
<p>影片的URL。</p>
<h3>autoplay</h3>
<p>影片是否自動播放，預設為 false。</p>
<h3>controls</h3>
<p>是否顯示播放控制列，若設定為ture將會顯示播放控制列，這個控制器的樣式是依據瀏覽器而定的，預設為 false。</p>
<h3>width</h3>
<p>&lt;video&gt; 所佔寬度。</p>
<h3>height </h3>
<p>&lt;video&gt; 所佔高度。</p>
<h3>poster </h3>
<p>這如同一些以Flash實現的播放器所提供的「預覽圖」功能一樣，可於此指定預覽圖的URL，當影片尚未開始播放時，將會先顯示這裡所指定的圖片。</p>
<h3>其他的屬性</h3>
<p>&lt;video&gt;的屬性還有 loopend / loopstart / playcount / start / end / loop 但這些屬性的各個瀏覽器的支援不一，因此目前不是很實用。</p>
<h3>簡單的範例</h3>
<p>以下的範例會在頁面載入完成後自動播放，並顯示瀏覽器內建的影片播放控制列，在載入完成並播放之前將會顯示所指定的預覽圖。</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:0bd24c20-08c2-413e-ab4e-a60c6a36c0ea" class="wlWriterEditableSmartContent">
<pre name="code" class="xml:nogutter">&lt;video id="myvideo" autoplay controls poster="preview.png" &gt;
	&lt;source src="video.ogg"&gt;
	&lt;source src="video.m4v"&gt;
	很抱歉！您的瀏覽器不知員HTML5 Video
&lt;/video&gt;</pre>
</div>
<h2>&lt;video&gt; 與瀏覽器的支援</h2>
<p>目前HTML5的 &lt;video&gt; 僅於以下瀏覽器版本支援：</p>
<p>Chrome4+ / Firefox 3.5+ / Opera 10.5+ / IE 9+ / Safari 4+ </p>
<p>以及以下Mobile平台：</p>
<p>iPhone / iPod / iPad / Android OS</p>
<p><strong>替代性的解決方案</strong></p>
<p>在過度時期我們可以使用 <a href="http://code.google.com/p/video4all/" target="_blank">video4all</a> 這個開源專案讓更多瀏覽器版本也能支援&lt;video&gt;。</p>
<p>透過 <a href="http://code.google.com/p/video4all/" target="_blank">video4all</a> 我們只需要於HTML中加入它所提供的Javascript Library。</p>
<p class="tip">&lt;script src=&quot;video4all.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</p>
<p>接著我們就可以正常的使用 &lt;video&gt; ，當訪客的瀏覽器不支援 &lt;video&gt; 時 video4all 會自動幫我們將&lt;video&gt;替換成使用Flash的播放器來播放所指定的影片。</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:505ca49b-8f7e-4930-9886-c84c8e257041" class="wlWriterEditableSmartContent">
<pre name="code" class="xml:nogutter">&lt;video&gt;
  &lt;source src="video.ogg" type="video/ogg" /&gt;
  &lt;source src="video.mp4" type="video/mp4" /&gt;
&lt;/video&gt;</pre>
</div>
<h2>HTML5 Video 成員</h2>
<p>在HTML5中我們可以透過 Video所提供的屬性以及方法來控制影片的播放與取得播放資訊。</p>
<h3>play()</h3>
<p>開始播放影片。</p>
<h3>pause()</h3>
<p>影片暫停播放。</p>
<h3>currentTime</h3>
<p><strong>numeric</strong> 目前的播放指標。</p>
<h3>readyState</h3>
<p>影片讀取狀態。</p>
<ul>
<li>HAVE_NOTHING = 0 </li>
<li>HAVE_METADATA = 1 </li>
<li>HAVE_CURRENT_DATA </li>
<li>HAVE_FUTURE_DATA = 2 </li>
<li>HAVE_ENOUGH_DATA = 3 </li>
</ul>
<h3>paused</h3>
<p><strong>boolean</strong> 是否停止</p>
<h3>muted</h3>
<p><strong>boolean</strong> 是否為靜音。</p>
<h3>volume</h3>
<p><strong>numeric</strong> 取得或設定音量值。</p>
<h3>ended</h3>
<p><strong>boolean</strong> 播放指標是否已經到最後。</p>
<h2>搭配jQuery的簡單HTML5 Video 控制範例</h2>
<p><a href="/html5/video/simple.html" target="_blank">請點我觀看範例</a></p>
<p><strong>simple.html</strong></p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:596625d8-15c6-4456-b233-d39f9af63947" class="wlWriterEditableSmartContent">
<pre name="code" class="xml:nogutter">&lt;!doctype html&gt;
&lt;html&gt;
	&lt;head&gt;
		&lt;meta charset="UTF-8"&gt;
		&lt;title&gt;HTML5 Video simple test&lt;/title&gt;
		&lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"&gt;&lt;/script&gt;
		&lt;script src="init.js"&gt;&lt;/script&gt;
	&lt;/head&gt;

	&lt;body&gt;
		&lt;p&gt;&lt;a href="http://blog.colorbase.tw/web-development/947"&gt;回文章&lt;/a&gt;&lt;/p&gt;
		&lt;video id="myvideo" poster="html5_video.png" &gt;
			&lt;source src="video.ogg"&gt;
			&lt;source src="video.m4v"&gt;
			很抱歉！您的瀏覽器不支援 HTML5 Video
		&lt;/video&gt;
		&lt;div id="state"&gt;&lt;/div&gt;
		&lt;p&gt;&lt;button id="play"&gt;Play&lt;/button&gt;&lt;button id="pause"&gt;Pause&lt;/button&gt;&lt;/p&gt;
		&lt;ul id="statelist"&gt;&lt;/ul&gt;
	&lt;/body&gt;
&lt;/html&gt;</pre>
</div>
<p><strong>init.js</strong></p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:913445dd-32a6-4c0b-bc8c-02f2f4f45612" class="wlWriterEditableSmartContent">
<pre name="code" class="js:nogutter">$(function(){
	var video = $('#myvideo')[0];//取得video
	var statelist = $('#statelist');
	var videoStateTexts = [
		'HAVE_NOTHING','HAVE_METADATA','HAVE_CURRENT_DATA',
		'HAVE_FUTURE_DATA','HAVE_ENOUGH_DATA'
	];
	var pr = ['currentTime','readyState','paused','muted','volume','ended'];

	$('#play').click(function(){
		video.play(); //播放影片
	});

	$('#pause').click(function(){
		video.pause(); //停止播放
	});

	var t = setInterval(function(){
		statelist.empty();
		$('#state').text(videoStateTexts[video.readyState]);
		for(x in pr){
			statelist.append($('&lt;li&gt;&lt;storng&gt;'+ pr[x]  + ' : ' + video[pr[x]] + '&lt;/strong&gt;&lt;/li&gt;'));
		}
	},100);
});</pre>
</div>
<h2>播放介面的解決方案</h2>
<p>雖然我們可以使用Javascript自行控制HTML5 Video的播放，也意味著我們可以自行開發更漂亮美觀的介面，但這終究會增加許多開發成本，目前已經有許多HTML5 Video Player，不僅提供漂亮的介面，甚至我們還可以根據需求自定播放器外觀。</p>
<h3><a href="http://www.mediafront.org/project/osmplayer" target="_blank">Open Standard Media Player</a></h3>
<p>非常專業且完整度極佳的HTML5 Video 播放器。</p>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/04/image15.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.colorbase.tw/wp-content/uploads/2010/04/image_thumb10.png" width="400" height="267" /></a> </p>
<h3><a href="http://camendesign.com/code/video_for_everybody" target="_blank">Video for Everybody!</a></h3>
<p>簡單清爽的播放介面。</p>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/04/image17.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.colorbase.tw/wp-content/uploads/2010/04/image_thumb12.png" width="400" height="224" /></a> </p>
<h3><a href="http://jilion.com/sublime/video" target="_blank">SublimeVideo</a></h3>
<p>典雅的播放介面。</p>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/04/image18.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.colorbase.tw/wp-content/uploads/2010/04/image_thumb13.png" width="400" height="235" /></a>&#160;</p>
<h3><a href="http://www.html5video.org/kaltura-html5/" target="_blank">Kaltura</a></h3>
<p>能整合jQuery UI訂製介面。</p>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/04/image19.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.colorbase.tw/wp-content/uploads/2010/04/image_thumb14.png" width="400" height="235" /></a> </p>
<h3><a href="http://www.openbeelden.nl/oiplayer/" target="_blank">OIPlayer jQuery plugin</a></h3>
<p>jQuery的Plugin</p>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/04/image20.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blog.colorbase.tw/wp-content/uploads/2010/04/image_thumb15.png" width="321" height="238" /></a> </p>
</p>
<h2>參考資料</h2>
<ul>
<li><a title="http://grack.com/blog/2009/07/07/video-support-for-older-browsers/" href="http://grack.com/blog/2009/07/07/video-support-for-older-browsers/">http://grack.com/blog/2009/07/07/video-support-for-older-browsers/</a> </li>
<li><a title="http://diveintohtml5.org/video.html" href="http://diveintohtml5.org/video.html">http://diveintohtml5.org/video.html</a> </li>
<li><a title="http://www.w3.org/TR/html5/video.html" href="http://www.w3.org/TR/html5/video.html">http://www.w3.org/TR/html5/video.html</a> </li>
<li><a title="http://www.broken-links.com/2009/10/06/building-html5-video-controls-with-javascript/" href="http://www.broken-links.com/2009/10/06/building-html5-video-controls-with-javascript/">http://www.broken-links.com/2009/10/06/building-html5-video-controls-with-javascript/</a> </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.colorbase.tw/web-development/947/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>開始HTML5 &#8211; Web Workers</title>
		<link>http://blog.colorbase.tw/web-development/888</link>
		<comments>http://blog.colorbase.tw/web-development/888#comments</comments>
		<pubDate>Fri, 23 Apr 2010 17:11:00 +0000</pubDate>
		<dc:creator>阿育</dc:creator>
				<category><![CDATA[Web開發]]></category>
		<category><![CDATA[程式設計]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[trend]]></category>
		<category><![CDATA[web-workers]]></category>

		<guid isPermaLink="false">http://blog.colorbase.tw/?p=888</guid>
		<description><![CDATA[HTML5帶來了許多的改變，除了標記語意上的增強之外，最令人震撼的莫過於它所附屬的Javascript APIs。而 Web Workers 是 HTML5 提供的一個多執行緒(Multi-Thread)的解決方案，讓我們可以把需要大量運算的程式交由Web Workers去做背景執行，如此的好處就是其他的工作仍可以順利進行。
Web Workes 目前支援的瀏覽器有：Firefox 3.5+ / Safari 4.0+ / Chrome 5.0+

 


HTML5 的不同
標記的不同
HTML5在標記上有著相當大的變化，其中最為明顯的即是語意上的標籤，在HTML5中，結構化網頁的語意更加清晰了，除了移除許多不必要的標記之外也增加了許多標記及有用的屬性，本文只簡述範例中會用到的部份。
若想知道自己編寫的HTML5是否有錯誤可以利用HTML5 validator來驗證。
DOCTYPE 變簡潔了
現在DOCTYPE只需簡短的這樣寫：

&#60;!DOCTYPE html&#62;

標籤不一定要閉合
在XHTML裡標籤必須要閉合，例如：

&#60;input type="text" id="name" /&#62;

而在HTML5中，以下的寫法也是正確的，而這也是比較建議的寫法：

&#60;input type="text" id="name"&#62;

同樣的方法也適用於meta，而且在指定content-type時，也只需要指定charset而不必定義文件類型text/html，例如：

&#60;meta charset="UTF-8"&#62;

Web Workers基本概念
在使用Web Workers時，我們必須建立一個Worker實體，並傳入要被呼叫的Javascript檔案所在URL，而我們必須把Worker要跑的程式寫在這個檔案中，例如：

var worker = new Worker("worker.js");

在worker.js中我們必須綁定onmessage來執行我們想要執行的動作，在這裡我們可以使用postMessage()來觸發Worker.onmessage事件，例如：

onmessage = function (evt) {
	for (var i=0; i&#60;100000000; i++) {
		//執行大量迴圈
		postMessage(i); // 觸發 Worker.onmessage() 並傳入 i
	};
};

Worker.onmessage(event) 事件
當在被呼叫的javascript裡呼叫postMessage()時，將會觸發這個事件，在這個事件中我們可以透過event.data來取得傳入資料。

worker.onmessage = function (e){
	// 由於在 worker.js 中使用了 ...]]></description>
			<content:encoded><![CDATA[<p>HTML5帶來了許多的改變，除了標記語意上的增強之外，最令人震撼的莫過於它所附屬的Javascript APIs。而 Web Workers 是 HTML5 提供的一個多執行緒(Multi-Thread)的解決方案，讓我們可以把需要大量運算的程式交由Web Workers去做背景執行，如此的好處就是其他的工作仍可以順利進行。</p>
<p>Web Workes 目前支援的瀏覽器有：Firefox 3.5+ / Safari 4.0+ / Chrome 5.0+</p>
</p>
<p> <span id="more-888"></span>
</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="html5_web_workers" border="0" alt="html5_web_workers" src="http://blog.colorbase.tw/wp-content/uploads/2010/04/html5_web_workers.png" width="400" height="286" /></p>
<h2>HTML5 的不同</h2>
<p><strong>標記的不同</strong></p>
<p>HTML5在標記上有著相當大的變化，其中最為明顯的即是語意上的標籤，在HTML5中，結構化網頁的語意更加清晰了，除了移除許多不必要的標記之外也增加了許多標記及有用的屬性，本文只簡述範例中會用到的部份。</p>
<p>若想知道自己編寫的HTML5是否有錯誤可以利用<a href="http://html5.validator.nu/" target="_blank">HTML5 validator</a>來驗證。</p>
<p><strong>DOCTYPE 變簡潔了</strong></p>
<p>現在DOCTYPE只需簡短的這樣寫：</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:7714dd36-584e-40a1-a576-2010022e278a" class="wlWriterEditableSmartContent">
<pre name="code" class="xml:nogutter">&lt;!DOCTYPE html&gt;</pre>
</div>
<p><strong>標籤不一定要閉合</strong></p>
<p>在XHTML裡標籤必須要閉合，例如：</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:30da56d4-5b66-4776-92e7-c7841d65385e" class="wlWriterEditableSmartContent">
<pre name="code" class="xml:nogutter">&lt;input type="text" id="name" /&gt;</pre>
</div>
<p>而在HTML5中，以下的寫法也是正確的，而這也是比較建議的寫法：</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:6a745a67-529f-448c-b2a7-2bc82d2f8685" class="wlWriterEditableSmartContent">
<pre name="code" class="xml:nogutter">&lt;input type="text" id="name"&gt;</pre>
</div>
<p>同樣的方法也適用於meta，而且在指定content-type時，也只需要指定charset而不必定義文件類型text/html，例如：</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:9286ad54-8926-459b-9861-27a5d61f4915" class="wlWriterEditableSmartContent">
<pre name="code" class="xml:nogutter">&lt;meta charset="UTF-8"&gt;</pre>
</div>
<h2>Web Workers基本概念</h2>
<p>在使用Web Workers時，我們必須建立一個Worker實體，並傳入要被呼叫的Javascript檔案所在URL，而我們必須把Worker要跑的程式寫在這個檔案中，例如：</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:6a92410e-2431-47f6-a787-a8e7379bf5cd" class="wlWriterEditableSmartContent">
<pre name="code" class="js:nogutter">var worker = new Worker("worker.js");</pre>
</div>
<p>在worker.js中我們必須綁定onmessage來執行我們想要執行的動作，在這裡我們可以使用postMessage()來觸發Worker.onmessage事件，例如：</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:f480ed37-4b24-4c84-b8a8-7897bf2b78ad" class="wlWriterEditableSmartContent">
<pre name="code" class="js:nogutter">onmessage = function (evt) {
	for (var i=0; i&lt;100000000; i++) {
		//執行大量迴圈
		postMessage(i); // 觸發 Worker.onmessage() 並傳入 i
	};
};</pre>
</div>
<p><strong>Worker.onmessage(event) 事件</strong></p>
<p>當在被呼叫的javascript裡呼叫postMessage()時，將會觸發這個事件，在這個事件中我們可以透過event.data來取得傳入資料。</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:1ab754fb-e683-472a-9dae-a5245b080ffd" class="wlWriterEditableSmartContent">
<pre name="code" class="js:nogutter">worker.onmessage = function (e){
	// 由於在 worker.js 中使用了 postMessage() 並傳入 i 值
	// 因此在這裡可以使用 event.data 來取得 i 值，並做出相關處理
	// 例如：
	console.log(e.data);
}</pre>
</div>
<p><strong>Worker.onerror(event) 事件</strong></p>
<p>當呼叫失敗時，將會觸發此事件，在這個事件中我們可以透過event來取得事件相關資訊。</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:1574452f-d5b9-4cfa-b25b-ad3f54dcdc1a" class="wlWriterEditableSmartContent">
<pre name="code" class="js:nogutter">worker.onerror = function(e){
	alert("於第["+ e.lineno +"]行發生錯誤 : " + e.message); //顯示錯誤訊息
}</pre>
</div>
<p><strong>Worker.terminate()</strong></p>
<p>用以停止Worker的執行的成員函數。</p>
<p>因此Web Worker簡單的操作流程圖如下：</p>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/04/image16.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="html5-web-workers" border="0" alt="html5-web-workers" src="http://blog.colorbase.tw/wp-content/uploads/2010/04/image_thumb11.png" width="400" height="422" /></a></p>
<h2>搭配jQuery的簡單Web Worker範例</h2>
<p><a href="/html5/web_workers_simple/worker.html" target="_blank">點我觀看Web Workers Demo</a></p>
<p>worker.html</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:b8988b77-5fda-40a3-be29-4323ba204859" class="wlWriterEditableSmartContent">
<pre name="code" class="xml:nogutter">&lt;!doctype html&gt;
&lt;html&gt;
	&lt;head&gt;
		&lt;meta charset="UTF-8"&gt;
		&lt;title&gt;Worker Test&lt;/title&gt;
		&lt;link rel="stylesheet" href="worker.css" type="text/css" media="screen"&gt;
		&lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"&gt;&lt;/script&gt;
		&lt;script src="init.js"&gt;&lt;/script&gt;
	&lt;/head&gt;

	&lt;body&gt;
		&lt;a href="#" id="startWorker"&gt;開始&lt;/a&gt;
		&lt;ul id="worker-list"&gt;&lt;/ul&gt;
		&lt;a href="#"&gt;回文章&lt;/a&gt;
	&lt;/body&gt;
&lt;/html&gt;</pre>
</div>
<p>worker.css</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:99c7580b-12f5-4617-b64a-3c56c9060045" class="wlWriterEditableSmartContent">
<pre name="code" class="css:nogutter">#worker-list {
	list-style-type: none;
	width: 400px;
}
#worker-list li {
	background-color: #FFE;
	margin: 3px;
	padding: 3px;
	border: 1px solid #C6BC9F;
	font-size: 16px;
	position: relative;
}

#worker-list .close {
	position: absolute;
	background-color: #FFF;
	display: block;
	height: 18px;
	width: 18px;
	border: 1px solid #CCC;
	text-align: center;
	vertical-align: middle;
	font-size: 12px;
	cursor:pointer;
	font-family: Arial, Helvetica, sans-serif;
	right: 3px;
	top: 3px;
}</pre>
</div>
<p>worker.js</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:d61331df-90ac-4c5c-8e93-b5d67f6425b1" class="wlWriterEditableSmartContent">
<pre name="code" class="js:nogutter">onmessage = function (e) {
	for (var i=0; i&lt;e.data; i++) {
		//觸發 worker.onmessage 傳入 i
		if(0 === i % 10 ) postMessage(i);
	};
};</pre>
</div>
<p>init.js</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:525d877f-fbc9-4f2a-a97d-fa21c2c5ed73" class="wlWriterEditableSmartContent">
<pre name="code" class="js:nogutter">$(function(){

	function createWorker (msgObj) {

		// 建立 worker
		var worker = new Worker("worker.js");

		worker.onmessage = function (e){
			msgObj.html(e.data); // 更新資訊 (e.data可取得觸發傳入值)
		}

		worker.onerror = function(e){
			alert("於第["+ e.lineno +"]行發生錯誤 : " + e.message); //顯示錯誤訊息
		}

		return worker;
	}

	$("#startWorker").click(function(){
		for(var i=0;i&lt;5;i++){
			addworker();
		}
		$(this).remove();
		return false;
	});

	function addworker(){
		var newItem = $('&lt;li /&gt;');
		var msg = $('&lt;span class="message"&gt;Waitting...&lt;/span&gt;');

		//關閉鈕
		var close = $('&lt;span class="close"&gt;X&lt;/span&gt;').click(function(){
			var li = $(this).closest('li');
			li.data('worker').terminate(); //停止worker的執行
			li.remove();
		});;

		var worker = createWorker (msg);

		//儲存Worker在元素裡
		newItem.data('worker',worker);

		//執行Worker
		worker.postMessage(30000);

		$('#worker-list').append(newItem.append(msg).append(close))
	}
});</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.colorbase.tw/web-development/888/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>與你的夥伴線上討論設計或概念 &#8211; Cacoo</title>
		<link>http://blog.colorbase.tw/web-development/881</link>
		<comments>http://blog.colorbase.tw/web-development/881#comments</comments>
		<pubDate>Sun, 18 Apr 2010 13:09:17 +0000</pubDate>
		<dc:creator>阿育</dc:creator>
				<category><![CDATA[Web開發]]></category>
		<category><![CDATA[設計]]></category>
		<category><![CDATA[軟體介紹]]></category>
		<category><![CDATA[online-tool]]></category>
		<category><![CDATA[wireframe]]></category>
		<category><![CDATA[網路工具]]></category>
		<category><![CDATA[網路資源]]></category>

		<guid isPermaLink="false">http://blog.colorbase.tw/web-development/881</guid>
		<description><![CDATA[Cacoo是一款很像Visio的免費線上工具，它可以用來繪製網站地圖、wireframe、UML、流程圖、網路圖等類型的圖表，其最大的特的點是它可以即時多人同時編輯。
以往當與夥伴處於異地而無法面對面直接溝通時，我們可能會用即時通訊軟體，你在那端、我在這端各自描述著自己的想法，遇到需要用圖形表示時只能透過即時通訊軟體或E-mail把編輯好的圖檔寄過去或用MSN之類的即時通訊軟體傳過去，這樣的過程不僅耗費不必要的時間，溝通起來也挺憋腳的，甚至還可能出現雞同鴨講的窘境。

現在透過Cacoo同時且即時的功能，我們將可以與夥伴的盡情的溝通，讓網路的溝通障礙減到最低，如果再搭配語音通訊的話，相信就更完美了。

Cacoo主要功能與特色

多人線上「即時」且「同時」編輯圖表。
可繪製網站地圖、wireframe、UML、流程圖及網路圖等類型的圖表。
內建簡易螢幕截圖工具，可直接擷取螢幕畫面並加入圖表中。
線上工具，走到哪用到哪。
提供多種圖形素材可直接套用，也可上傳自己的圖片。
內建即時通訊功能，就算沒裝MSN也能用溝通。

Screenshot
可繪製多種圖形，例如下圖的網路架構圖。

可繪製wireframe與夥伴溝同版面設計。

可邀請夥伴編輯同一份文件，當夥伴已經在編輯時，於文件列表中將會以「Editing」提示。

內建的即時通訊功能，沒有安裝MSN或Skype也能線上即時溝通(文字溝通)。

當對方在編輯內容時，可「即時」看到對方正在編輯的動作。

Cacoo官方的介紹影片

Cacoo &#8211; Real-time Collaborative Diagramming &#38; Design from Nulab Inc. on Vimeo.
相關連結
Cacoo 線上即時協作繪圖工具
]]></description>
			<content:encoded><![CDATA[<p><a href="http://cacoo.com/" target="_blank">Cacoo</a>是一款很像Visio的<strong>免費</strong>線上工具，它可以用來繪製網站地圖、wireframe、UML、流程圖、網路圖等類型的圖表，其最大的特的點是它可以<strong>即時多人同時編輯</strong>。</p>
<p>以往當與夥伴處於異地而無法面對面直接溝通時，我們可能會用即時通訊軟體，你在那端、我在這端各自描述著自己的想法，遇到需要用圖形表示時只能透過即時通訊軟體或E-mail把編輯好的圖檔寄過去或用MSN之類的即時通訊軟體傳過去，這樣的過程不僅耗費不必要的時間，溝通起來也挺憋腳的，甚至還可能出現雞同鴨講的窘境。</p>
<p><span id="more-881"></span></p>
<p>現在透過Cacoo同時且即時的功能，我們將可以與夥伴的盡情的溝通，讓網路的溝通障礙減到最低，如果再搭配語音通訊的話，相信就更完美了。</p>
<p><img style="display: inline; border-width: 0px;" title="image" src="http://blog.colorbase.tw/wp-content/uploads/2010/04/image9.png" border="0" alt="image" width="400" height="274" /></p>
<h2>Cacoo主要功能與特色</h2>
<ul>
<li>多人線上「<strong>即時</strong>」且「<strong>同時</strong>」編輯圖表。</li>
<li>可繪製網站地圖、wireframe、UML、流程圖及網路圖等類型的圖表。</li>
<li>內建簡易螢幕截圖工具，可直接擷取螢幕畫面並加入圖表中。</li>
<li>線上工具，走到哪用到哪。</li>
<li>提供多種圖形素材可直接套用，也可上傳自己的圖片。</li>
<li>內建即時通訊功能，就算沒裝MSN也能用溝通。</li>
</ul>
<h2>Screenshot</h2>
<p>可繪製多種圖形，例如下圖的網路架構圖。</p>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/04/image10.png"><img style="display: inline; border-width: 0px;" title="image" src="http://blog.colorbase.tw/wp-content/uploads/2010/04/image_thumb6.png" border="0" alt="image" width="400" height="248" /></a></p>
<p>可繪製wireframe與夥伴溝同版面設計。</p>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/04/image11.png"><img style="display: inline; border-width: 0px;" title="image" src="http://blog.colorbase.tw/wp-content/uploads/2010/04/image_thumb7.png" border="0" alt="image" width="400" height="248" /></a></p>
<p>可邀請夥伴編輯同一份文件，當夥伴已經在編輯時，於文件列表中將會以「Editing」提示。</p>
<p><img style="display: inline; border-width: 0px;" title="image" src="http://blog.colorbase.tw/wp-content/uploads/2010/04/image12.png" border="0" alt="image" width="263" height="309" /></p>
<p>內建的即時通訊功能，沒有安裝MSN或Skype也能線上即時溝通(文字溝通)。</p>
<p><a href="http://blog.colorbase.tw/wp-content/uploads/2010/04/image13.png"><img style="display: inline; border-width: 0px;" title="image" src="http://blog.colorbase.tw/wp-content/uploads/2010/04/image_thumb8.png" border="0" alt="image" width="400" height="248" /></a></p>
<p>當對方在編輯內容時，可「<strong>即時</strong>」看到對方正在編輯的動作。</p>
<p><img style="display: inline; border-width: 0px;" title="image" src="http://blog.colorbase.tw/wp-content/uploads/2010/04/image_thumb9.png" border="0" alt="image" width="400" height="301" /></p>
<p><strong>Cacoo官方的介紹影片</strong></p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="250" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=7502521&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="400" height="250" src="http://vimeo.com/moogaloop.swf?clip_id=7502521&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><a href="http://vimeo.com/7502521">Cacoo &#8211; Real-time Collaborative Diagramming &amp; Design</a> from <a href="http://vimeo.com/user1881721">Nulab Inc.</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<h2>相關連結</h2>
<p><a href="http://cacoo.com/" target="_blank">Cacoo 線上即時協作繪圖工具</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.colorbase.tw/web-development/881/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
