<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CkcMR3Y-fCp7ImA9WhRbFEw.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080</id><updated>2012-02-04T18:48:06.854-08:00</updated><category term="生活" /><category term="C#" /><category term="video" /><category term="flex" /><title>NoteBox</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://chuiwenchiu-arick.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>81</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogspot/tPAXj" /><feedburner:info uri="blogspot/tpaxj" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;Dk4NR3syfyp7ImA9WhdREk0.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-3556947997054437599</id><published>2011-08-01T06:22:00.000-07:00</published><updated>2011-08-01T06:23:16.597-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-01T06:23:16.597-07:00</app:edited><title>《不能戳的秘密》</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qfHoqy0rkJkuNdNzJ8M8etQITUY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qfHoqy0rkJkuNdNzJ8M8etQITUY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qfHoqy0rkJkuNdNzJ8M8etQITUY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qfHoqy0rkJkuNdNzJ8M8etQITUY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;轉自：http://feedproxy.google.com/~r/Clubtblog/~3/U9mwedm2fvk/blog-post.html&lt;br /&gt;
&lt;div&gt;&lt;object style="height: 390px; width: 440px"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Jcs7hA5iwZE?version=3"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/Jcs7hA5iwZE?version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="440" height="390"&gt;&lt;/object&gt;&lt;br /&gt;
&lt;/div&gt;片長實在太長，以下是幫沒時間看的人做簡單懶人包&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. 高致病性禽流感病毒 H5N1, H5N2 已經 " 在地化  "&lt;br /&gt;
結合在一起變成新種變種病毒&lt;br /&gt;
&lt;br /&gt;
2. 禽流感病毒已傳染給豬隻  (達14.9%）&lt;br /&gt;
只要傳染給豬隻代表有可能從豬身上繼續傳染給哺乳類&lt;br /&gt;
&lt;br /&gt;
3. 學者調查台灣北中南的養雞場 " 工作人員 "&lt;br /&gt;
其中有 20%  的人對禽流感血清疫苗產生陽性反應&lt;br /&gt;
20% 之中更有 66 個人確定已經感染 H5N2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
事件部份：&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1.  早在2004年、2006年就發現禽流感疫情，也有媒體報導&lt;br /&gt;
但政府都用「是候鳥傳染」當作藉口，在媒體面前上演清洗電線桿的可笑戲碼&lt;br /&gt;
&lt;br /&gt;
2.  2006年為了加入ＷＨＯ，為了把「積極防治禽流感」當作入會宣傳&lt;br /&gt;
明明疫情已爆發卻不敢聲張怕沒辦法入會&lt;br /&gt;
&lt;br /&gt;
3.  學者提出學術研究報告，卻因為出資者是農委會，不敢聲張&lt;br /&gt;
該份報告也被河蟹，農委會檢驗所的紀錄消失無蹤&lt;br /&gt;
&lt;br /&gt;
4.  雞農困於每次發生疫情都會被撲殺加上雞價掉落，不敢直言&lt;br /&gt;
但私底下自己都會接種疫苗讓死亡率降低&lt;br /&gt;
這種做法卻變成另一種傳染源，讓雞隻感染率大增&lt;br /&gt;
（  = 我們吃的雞可能都是遭受過感染的病雞）&lt;br /&gt;
&lt;br /&gt;
5.  導演長期自行解剖雞隻，自行送檢驗所追蹤&lt;br /&gt;
並有一些被政府隱匿的證據報告是由匿名者提供&lt;br /&gt;
&lt;br /&gt;
6.  2008年五月（馬政府初上任）發生六萬隻雞暴斃事件&lt;br /&gt;
農委會告訴媒體這不是H5N2禽流感而是另一種「新城病毒」&lt;br /&gt;
但防檢局又發了篇新聞稿說「不是新城雞瘟，原因不明」&lt;br /&gt;
真正的答案是變種病毒&lt;br /&gt;
&lt;br /&gt;
7.  然而台灣沒有回報給OIE（世界動物衛生組織）任何情報&lt;br /&gt;
農委會反而在12月把「新城病毒」從甲級降到乙級&lt;br /&gt;
&lt;br /&gt;
8.  2010年一月發生大量疫情，發現H5N2&lt;br /&gt;
家畜衛生所連續做了兩次試驗，檢測後發現28間養雞場都呈現陽性反應&lt;br /&gt;
指數都遠遠超過國際標準（測出：2.54  vs. OIE：1.2）&lt;br /&gt;
&lt;br /&gt;
9.  2010年五月媒體舉發，農委會卻全部否認&lt;br /&gt;
告訴大家「這是低病原，沒有人死掉就代表不嚴重」&lt;br /&gt;
檢驗報告卻被列為「公務機密」不讓外部檢閱&lt;br /&gt;
&lt;br /&gt;
10.  導演訪問農委會防疫檢驗局局長&lt;br /&gt;
局長表示「沒有大量的死亡疫情報告，不算有病毒」&lt;br /&gt;
&lt;br /&gt;
11. 農委會私底下開了兩次會議和眾學者 "商量"  兩次試驗該怎麼辦&lt;br /&gt;
與會者包括台大獸醫系教授等等，眾學者卻同意：&lt;br /&gt;
&lt;br /&gt;
12.  為了掩蓋疫情，農委會竟然想出「獨步全球的檢驗實驗」&lt;br /&gt;
重新買了六十隻中雞想做出新的實驗報告&lt;br /&gt;
讓指數掉回正常值再回報給OIE&lt;br /&gt;
（現在OIE官方網站上面台灣的正常數字正是這份  "新" 報告）&lt;br /&gt;
&lt;br /&gt;
13.  導演和記者分別打電話給當時的參與學者，所有的學者都推說不清楚不知道&lt;br /&gt;
紀錄片後半段就是當時參加會議時的所有人全部都在推托的電聯紀錄...&lt;br /&gt;
而經調查當時與會教授大半都有拿政府的補助經費...&lt;br /&gt;
&lt;br /&gt;
14.  家畜衛生實驗室所長承認做了六十隻中雞的實驗&lt;br /&gt;
也承認沒把最之前所作的兩次指數超常的報告交給OIE&lt;br /&gt;
對於屏東大量雞隻死亡的案件，卻告訴導演「你先把攝影機轉掉」&lt;br /&gt;
&lt;br /&gt;
15.  六年來跨越兩大政黨輪替的禽流感&lt;br /&gt;
從一開始的低致病性，演變成高致病性&lt;br /&gt;
最後演變成台灣官員篡改數字交給國際組織聲稱一切沒問題&lt;br /&gt;
成為不能戳的祕密&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
片尾導演告訴大家可從蛋價來判斷禽流感是否正在發生&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-3556947997054437599?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/tPAXj/~4/Uu_ric6LkSU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/3556947997054437599/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5113208746101413080&amp;postID=3556947997054437599" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/3556947997054437599?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/3556947997054437599?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/tPAXj/~3/Uu_ric6LkSU/blog-post_4413.html" title="《不能戳的秘密》" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://chuiwenchiu-arick.blogspot.com/2011/08/blog-post_4413.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4BQnY8fCp7ImA9WhdREk0.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-3965386634609992210</id><published>2011-08-01T05:49:00.000-07:00</published><updated>2011-08-01T05:49:13.874-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-01T05:49:13.874-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><title>梁靜茹-沒有如果</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/trL-JUKLXH5IxxbHEP4qO53uyqw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/trL-JUKLXH5IxxbHEP4qO53uyqw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/trL-JUKLXH5IxxbHEP4qO53uyqw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/trL-JUKLXH5IxxbHEP4qO53uyqw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://2.gvt0.com/vi/yfETTcuNUSI/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/yfETTcuNUSI&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/yfETTcuNUSI&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-3965386634609992210?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/tPAXj/~4/nMUzJWFN-xg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/3965386634609992210/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5113208746101413080&amp;postID=3965386634609992210" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/3965386634609992210?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/3965386634609992210?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/tPAXj/~3/nMUzJWFN-xg/blog-post_4361.html" title="梁靜茹-沒有如果" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://chuiwenchiu-arick.blogspot.com/2011/08/blog-post_4361.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEENRXs6cCp7ImA9WhdREk0.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-8771167475922671687</id><published>2011-08-01T05:44:00.000-07:00</published><updated>2011-08-01T05:44:54.518-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-01T05:44:54.518-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="生活" /><title>沖馬桶的正確觀念</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/D45euiPUSiqHZOIJZUYm0gyB4RU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/D45euiPUSiqHZOIJZUYm0gyB4RU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/D45euiPUSiqHZOIJZUYm0gyB4RU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/D45euiPUSiqHZOIJZUYm0gyB4RU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 21px;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="background-color: white; font-size: 12px; line-height: 1.5em;"&gt;※沖馬桶時一定要蓋上蓋子&lt;/div&gt;&lt;div style="background-color: white; font-size: 12px; line-height: 1.5em;"&gt;馬桶，人們每天都要使用，但稍不留意，它也可能成為疾病之源。&lt;/div&gt;&lt;div style="font-size: 12px; line-height: 1.5em;"&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;紐約大學菲利普·泰爾諾博士指出，&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: yellow;"&gt;如果沖水時馬桶蓋打開，馬桶內的瞬間氣旋最高可以將病菌或微生物帶到6米高的空中，並懸浮在空氣中長達幾小時，進而落在浴廁物品上。&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;現在大部分家庭中，如廁、洗漱、淋浴都在衛生間裡進行，牙刷、漱口杯、毛巾等與馬桶共處一室，自然很容易受到細菌污染。因此，應養成沖水時蓋上馬桶蓋的習慣。&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 12px; line-height: 18px;"&gt;復旦大學公共衛生學院鬱慶福教授指出，調查發現，32％的馬桶上有痢疾桿菌，其中一種名為“宋內”的痢疾桿菌在馬桶圈上存活的時間長達17天；另一份實驗報告也指出，將1億個脊髓灰質炎病毒投入馬桶內，濺到座圈上的病毒竟有3000個。同時，不少人冬天喜歡在馬桶上套個絨布墊圈，這樣更容易吸附、滯留排泄污染物，傳播疾病的可能性更大。&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 21px;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 12px; line-height: 18px;"&gt;污染如此嚴重的地方恰恰和人們皮膚的接觸最“親密”，因此要重點進行清潔，每隔一兩天應用稀釋的家用消毒液擦拭。至於布制的墊圈最好不用，如果一定要使用的話，應經常清洗消毒。如果有&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 21px;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="background-color: white; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 12px; line-height: 18px;"&gt;條件，不妨換一個具有抗菌功能和防濺設計的座便器。&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 12px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 21px;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="background-color: white; font-size: 12px; line-height: 1.5em;"&gt;馬桶圈細菌多要重點清潔&lt;/div&gt;&lt;span class="Apple-style-span" style="background-color: yellow; color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 12px; line-height: 18px;"&gt;馬桶容易沾染尿漬、糞便等污物，沖水後如果發現仍留有殘跡，一定要及時用馬桶刷清除乾淨，否則容易形成黃斑污漬，也會滋生黴菌和細菌。除了管道口附近，馬桶內緣出水口處和底座外側都是&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'lucida grande', tahoma, verdana, arial, sans-serif; font-size: 14px; line-height: 21px;"&gt;&lt;div style="background-color: white; font-size: 12px; line-height: 1.5em;"&gt;馬桶內的髒物及時清洗&lt;/div&gt;&lt;div style="font-size: 12px; line-height: 1.5em;"&gt;&lt;span class="Apple-style-span" style="background-color: yellow;"&gt;藏污納垢的地方，清洗時先把馬桶圈掀起，並用潔廁劑噴淋內部，數分鐘後，再用馬桶刷徹底刷洗一遍，最好用細頭的刷子，這樣能更好地清潔馬桶內緣和管道口深處。然後再刷洗底座和其他縫&lt;/span&gt;&lt;/div&gt;&lt;div style="font-size: 12px; line-height: 1.5em;"&gt;&lt;span class="Apple-style-span" style="background-color: yellow;"&gt;隙。&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-8771167475922671687?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/tPAXj/~4/UMJutnt8ppU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/8771167475922671687/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5113208746101413080&amp;postID=8771167475922671687" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/8771167475922671687?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/8771167475922671687?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/tPAXj/~3/UMJutnt8ppU/blog-post_1641.html" title="沖馬桶的正確觀念" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://chuiwenchiu-arick.blogspot.com/2011/08/blog-post_1641.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIDQ3gzeCp7ImA9WhdREk0.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-8236123037366573111</id><published>2011-08-01T05:42:00.000-07:00</published><updated>2011-08-01T05:42:52.680-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-01T05:42:52.680-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><title>范瑋琪 最重要的決定</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9jNEIBEWYJSK7gi1JnXQ74WOnTM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9jNEIBEWYJSK7gi1JnXQ74WOnTM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9jNEIBEWYJSK7gi1JnXQ74WOnTM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9jNEIBEWYJSK7gi1JnXQ74WOnTM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;object style="height: 390px; width: 440px"&gt;&lt;param name="movie" value="http://www.youtube.com/v/IwkM_B3k0z4?version=3"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/IwkM_B3k0z4?version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="440" height="390"&gt;&lt;/object&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-8236123037366573111?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/tPAXj/~4/Brw_5zOtIic" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/8236123037366573111/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5113208746101413080&amp;postID=8236123037366573111" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/8236123037366573111?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/8236123037366573111?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/tPAXj/~3/Brw_5zOtIic/blog-post_01.html" title="范瑋琪 最重要的決定" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://chuiwenchiu-arick.blogspot.com/2011/08/blog-post_01.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08ESHo7fip7ImA9WhdREk0.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-3320661929817930197</id><published>2011-08-01T05:26:00.000-07:00</published><updated>2011-08-01T05:30:09.406-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-01T05:30:09.406-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><title>不就是一台車有必要玩這麼大嗎</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5iUT9eKrC3hcSA49eTtARn4Ze9o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5iUT9eKrC3hcSA49eTtARn4Ze9o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5iUT9eKrC3hcSA49eTtARn4Ze9o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5iUT9eKrC3hcSA49eTtARn4Ze9o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object style="height: 390px; width: 440px;"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ay6lajJu0gg?version=3"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/ay6lajJu0gg?version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="440" height="390"&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-3320661929817930197?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/tPAXj/~4/fn36iyu_ADg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/3320661929817930197/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5113208746101413080&amp;postID=3320661929817930197" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/3320661929817930197?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/3320661929817930197?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/tPAXj/~3/fn36iyu_ADg/blog-post.html" title="不就是一台車有必要玩這麼大嗎" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://chuiwenchiu-arick.blogspot.com/2011/08/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EBSHY8cSp7ImA9WxVUGUQ.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-2019256209566153516</id><published>2009-03-25T07:34:00.001-07:00</published><updated>2009-03-25T07:34:19.879-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-25T07:34:19.879-07:00</app:edited><title>伊甸愛心園丁</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6do5v4UAWXT_bLan_Ce0izfXDKc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6do5v4UAWXT_bLan_Ce0izfXDKc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6do5v4UAWXT_bLan_Ce0izfXDKc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6do5v4UAWXT_bLan_Ce0izfXDKc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;P CLASS="western" ALIGN=CENTER&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT SIZE=5&gt;&lt;B&gt;&amp;#24171;&amp;#24171;&amp;#24369;&amp;#21218;&amp;#20818;&amp;#31461;&amp;#21450;&amp;#36523;&amp;#38556;&amp;#26379;&amp;#21451;&amp;#65374;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT SIZE=5&gt;&lt;B&gt;2000&lt;/B&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT SIZE=5&gt;&lt;B&gt;&amp;#20491;&amp;#24859;&amp;#24515;&amp;#22290;&amp;#19969;&amp;#65292;&amp;#23601;&amp;#24046;&amp;#20320;&amp;#19968;&amp;#20491;&amp;#65281;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P CLASS="western" ALIGN=JUSTIFY&gt;&lt;BR&gt;&lt;br /&gt;&lt;/P&gt;&lt;br /&gt;&lt;P CLASS="western" ALIGN=JUSTIFY&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;FONT COLOR="#000000"&gt;&amp;#12300;&lt;IMG src="http://docs.google.com/File?id=dcxw59mr_27fj9sf7fk_b" NAME="graphics1" ALIGN=LEFT HSPACE=13 WIDTH=205 HEIGHT=147 BORDER=0&gt;&amp;hellip;&amp;#29983;&amp;#21629;&amp;#26159;&amp;#37027;&amp;#27171;&amp;#30340;&amp;#32654;&amp;#22909;&amp;#65292;&amp;#28982;&amp;#32780;&amp;#65292;&amp;#23565;&amp;#32085;&amp;#22823;&amp;#22810;&amp;#25976;&amp;#30340;&amp;#36523;&amp;#24515;&amp;#38556;&amp;#31001;&amp;#32773;&amp;#20358;&amp;#35498;&amp;#65292;&amp;#12288;&amp;#12288;&amp;#20182;&amp;#20497;&amp;#30340;&amp;#26085;&amp;#23376;&amp;#26159;&amp;#28024;&amp;#22312;&amp;#28122;&amp;#27700;&amp;#20013;&amp;#30340;&amp;#12290;&amp;#25105;&amp;#21482;&amp;#26159;&amp;#24819;&amp;#65292;&amp;#25105;&amp;#20497;&amp;#33021;&amp;#20570;&amp;#40670;&amp;#20160;&amp;#40636;&amp;#65292;&amp;#22909;&amp;#35731;&amp;#20182;&amp;#20497;&amp;#30340;&amp;#30524;&amp;#28122;&amp;#21487;&amp;#20197;&amp;#23569;&amp;#27969;&amp;#19968;&amp;#40670;&amp;#65292;&amp;#36335;&amp;#21487;&amp;#20197;&amp;#24179;&amp;#22374;&amp;#19968;&amp;#40670;&amp;#12290;&amp;#22909;&amp;#35731;&amp;#20182;&amp;#20497;&amp;#22312;&amp;#25340;&amp;#39717;&amp;#30340;&amp;#36942;&amp;#31243;&amp;#20013;&amp;#65292;&amp;#19981;&amp;#34987;&amp;#22825;&amp;#25802;&amp;#20498;&amp;#65292;&amp;#19981;&amp;#34987;&amp;#20154;&amp;#25802;&amp;#20498;&amp;#65307;&amp;#26368;&amp;#37325;&amp;#35201;&amp;#30340;&amp;#65292;&amp;#20063;&amp;#19981;&amp;#34987;&amp;#33258;&amp;#24049;&amp;#25802;&amp;#20498;&amp;#12290;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P CLASS="western" ALIGN=JUSTIFY&gt;&lt;BR&gt;&lt;br /&gt;&lt;/P&gt;&lt;br /&gt;&lt;P CLASS="western" ALIGN=JUSTIFY&gt;&lt;br /&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&amp;#20445;&amp;#30041;&amp;#20182;&amp;#20497;&amp;#26368;&amp;#24460;&amp;#19968;&amp;#40670;&amp;#23562;&amp;#22196;&amp;#21644;&amp;#33258;&amp;#20449;&amp;#65292;&amp;#27963;&amp;#20986;&amp;#19968;&amp;#20491;&amp;#20154;&amp;#30340;&amp;#27171;&amp;#23376;&amp;#12290;&amp;#12301;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P CLASS="western" ALIGN=JUSTIFY&gt;&lt;BR&gt;&lt;br /&gt;&lt;/P&gt;&lt;br /&gt;&lt;P CLASS="western" ALIGN=JUSTIFY&gt;&lt;br /&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT SIZE=2&gt;&lt;B&gt;&amp;#21129;&amp;#20448;&amp;#22899;&amp;#22763;&amp;#21109;&amp;#36774;&amp;#30340;&amp;#20234;&amp;#30008;&amp;#22522;&amp;#37329;&amp;#26371;&amp;#65292;&amp;#24076;&amp;#26395;&amp;#33021;&amp;#25307;&amp;#21215;&amp;#39000;&amp;#24847;&amp;#25345;&amp;#32396;&amp;#20184;&amp;#20986;&amp;#24859;&amp;#24515;&amp;#30340;&amp;#22290;&amp;#19969;&amp;#65292;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P CLASS="western" ALIGN=JUSTIFY&gt;&lt;br /&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT SIZE=2&gt;&lt;B&gt;&amp;#27599;&amp;#20491;&amp;#26376;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT SIZE=2&gt;&lt;B&gt;300&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT SIZE=2&gt;&lt;B&gt;&amp;#20803;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT SIZE=2&gt;&lt;B&gt;(1&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT SIZE=2&gt;&lt;B&gt;&amp;#22825;&amp;#21482;&amp;#35201;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT SIZE=2&gt;&lt;B&gt;10&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT SIZE=2&gt;&lt;B&gt;&amp;#20803;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT SIZE=2&gt;&lt;B&gt;)&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT SIZE=2&gt;&lt;B&gt;&amp;#65292;&amp;#23601;&amp;#21487;&amp;#20197;&amp;#21332;&amp;#21161;&amp;#24369;&amp;#21218;&amp;#20818;&amp;#31461;&amp;#21450;&amp;#36523;&amp;#38556;&amp;#26379;&amp;#21451;&amp;#12290;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt;	&lt;LI&gt;&lt;P CLASS="western" ALIGN=JUSTIFY&gt;&lt;br /&gt;	&lt;FONT COLOR="#ff6600"&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;B&gt;&amp;#25424;&amp;#27454;&amp;#20154;&amp;#36039;&amp;#26009;&lt;/B&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;B&gt;:&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;/UL&gt;&lt;br /&gt;&lt;br /&gt;	&lt;br /&gt;	&lt;TABLE WIDTH=647 BORDER=1 BORDERCOLOR="#000000" CELLPADDING=2 CELLSPACING=0&gt;&lt;br /&gt;		&lt;br /&gt;		&lt;br /&gt;		&lt;TR&gt;&lt;br /&gt;			&lt;TD WIDTH=308 HEIGHT=29&gt;&lt;br /&gt;				&lt;P CLASS="western"&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&amp;#22995;&amp;#21517;&amp;#65306;&amp;#25424;&amp;#27454;&amp;#20154;&amp;#22995;&amp;#21517;&lt;/FONT&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;:&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;			&lt;/TD&gt;&lt;br /&gt;			&lt;TD WIDTH=329&gt;&lt;br /&gt;				&lt;P CLASS="western"&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&amp;#36523;&amp;#20221;&amp;#35657;&amp;#23383;&amp;#34399;&lt;/FONT&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;:&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;			&lt;/TD&gt;&lt;br /&gt;		&lt;/TR&gt;&lt;br /&gt;		&lt;TR&gt;&lt;br /&gt;			&lt;TD WIDTH=308 HEIGHT=30&gt;&lt;br /&gt;				&lt;P CLASS="western" ALIGN=JUSTIFY&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;FONT COLOR="#000000"&gt;&lt;FONT SIZE=3&gt;&lt;font size="4"&gt;&amp;#25910;&amp;#25818;&amp;#25260;&amp;#38957;&lt;/font&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;FONT COLOR="#000000"&gt;&lt;FONT SIZE=3&gt;&lt;font size="4"&gt;:&lt;/font&gt;&lt;/FONT&gt;&lt;br /&gt;				  &lt;/FONT&gt;&lt;/FONT&gt;&lt;br /&gt;				&lt;/P&gt;&lt;br /&gt;			&lt;/TD&gt;&lt;br /&gt;			&lt;TD WIDTH=329&gt;&lt;br /&gt;				&lt;P CLASS="western" ALIGN=JUSTIFY&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;FONT COLOR="#000000"&gt;&lt;FONT SIZE=3&gt;&lt;font size="4"&gt;&amp;#24615;&amp;#21029;&amp;#65306;&lt;/font&gt;&lt;/FONT&gt;&amp;#29983;&amp;#26085;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;FONT COLOR="#000000"&gt;:&lt;br /&gt;				     &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;FONT COLOR="#000000"&gt;&amp;#24180;&lt;br /&gt;				     &amp;#26376;      &amp;#26085;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;			&lt;/TD&gt;&lt;br /&gt;		&lt;/TR&gt;&lt;br /&gt;		&lt;TR&gt;&lt;br /&gt;			&lt;TD COLSPAN=2 WIDTH=641 HEIGHT=30&gt;&lt;br /&gt;				&lt;P CLASS="western" ALIGN=JUSTIFY&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&amp;#38651;&amp;#35441;&amp;#65306;&lt;br /&gt;				                           &amp;#25163;&amp;#27231;&amp;#65306;              &lt;br /&gt;				   &lt;/FONT&gt;&lt;br /&gt;				&lt;/P&gt;&lt;br /&gt;			&lt;/TD&gt;&lt;br /&gt;		&lt;/TR&gt;&lt;br /&gt;		&lt;TR&gt;&lt;br /&gt;			&lt;TD COLSPAN=2 WIDTH=641 HEIGHT=29&gt;&lt;br /&gt;				&lt;P CLASS="western" ALIGN=JUSTIFY&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&amp;#36890;&amp;#35338;&amp;#22320;&amp;#22336;&lt;/FONT&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;:&lt;br /&gt;				&lt;/FONT&gt;&lt;br /&gt;				&lt;/P&gt;&lt;br /&gt;			&lt;/TD&gt;&lt;br /&gt;		&lt;/TR&gt;&lt;br /&gt;	&lt;/TABLE&gt;&lt;br /&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt;	&lt;LI&gt;&lt;P CLASS="western"&gt;&lt;br /&gt;	&lt;FONT COLOR="#ff6600"&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;B&gt;&amp;#25424;&amp;#27454;&amp;#26041;&amp;#24335;&amp;#65288;&amp;#25345;&amp;#32396;&amp;#33267;&amp;#23569;&amp;#19968;&amp;#24180;&amp;#65289;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;/UL&gt;&lt;br /&gt;&lt;P CLASS="western"&gt;&lt;br /&gt;    &lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT SIZE=2&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&amp;#26376;&amp;#25424;&amp;#9633;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT SIZE=2&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;300&lt;br /&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT SIZE=2&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&amp;#20803;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT SIZE=2&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;/&lt;br /&gt;&amp;#9633;500&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT SIZE=2&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&amp;#20803;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT SIZE=2&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;/&lt;br /&gt;&amp;#9633;1000&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT SIZE=2&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&amp;#20803;&lt;br /&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT SIZE=2&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;/&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT SIZE=2&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&amp;#20854;&amp;#23427;&lt;br /&gt;           &amp;#20803; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;br /&gt;&lt;/P&gt;&lt;br /&gt;&lt;P CLASS="western"&gt;&lt;br /&gt;    &lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;FONT SIZE=2&gt;&lt;font size="3"&gt;&amp;#21152;&amp;#20837;&amp;#26085;&amp;#26399;&amp;#65306;&lt;/font&gt;&lt;br /&gt;            &lt;font size="3"&gt;  &amp;#32066;&amp;#27490;&amp;#26085;&amp;#26399;&amp;#65306;&lt;/font&gt;        &lt;br /&gt;     &lt;/FONT&gt;&lt;FONT SIZE=2&gt;&amp;#65288;&amp;#26410;&amp;#22635;&amp;#32773;&amp;#27442;&amp;#20572;&amp;#27490;&amp;#25424;&amp;#27454;&amp;#26178;&amp;#35531;&amp;#38651;&amp;#35441;&amp;#36890;&amp;#30693;&lt;br /&gt;&amp;#65289;&lt;/FONT&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;br /&gt;&lt;/P&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt;	&lt;LI&gt;&lt;P CLASS="western"&gt;&lt;br /&gt;	&lt;FONT COLOR="#ff6600"&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;B&gt;&amp;#25424;&amp;#27454;&amp;#26041;&amp;#27861;&amp;#65306;&lt;/B&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;/UL&gt;&lt;br /&gt;&lt;P CLASS="western"&gt;&lt;br /&gt;&amp;#9633;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&amp;#20449;&amp;#29992;&amp;#21345;&amp;#25424;&amp;#27454;&amp;#65288;&amp;#22635;&amp;#23531;&amp;#20197;&amp;#19979;&amp;#20449;&amp;#29992;&amp;#21345;&amp;#36039;&amp;#26009;&amp;#21363;&amp;#21487;&amp;#65289;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P CLASS="western" style="margin-left: 0.17in"&gt;&lt;br /&gt;      &lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&amp;#30332;&amp;#21345;&amp;#37504;&amp;#34892;&amp;#65306;&lt;br /&gt;                            &amp;#20449;&amp;#29992;&amp;#21345;&amp;#26377;&amp;#25928;&amp;#26399;&amp;#38480;&amp;#65306;&amp;#35199;&amp;#20803;&lt;br /&gt;    &amp;#24180;&amp;#12288;   &amp;#26376;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P CLASS="western" style="margin-left: 0.17in"&gt;&lt;br /&gt;      &lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&amp;#20449;&amp;#29992;&amp;#21345;&amp;#21345;&amp;#34399;&amp;#65306;&amp;#12288;&amp;#12288;&amp;#12288;&amp;#12288;&amp;#12288;&lt;br /&gt;                 &amp;#25424;&amp;#27454;&amp;#37329;&amp;#38989;&amp;#65306;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;$&lt;br /&gt;                    &lt;/FONT&gt;&lt;br /&gt;&lt;/P&gt;&lt;br /&gt;&lt;P CLASS="western" style="margin-left: 0.33in"&gt;&lt;br /&gt;      &lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&amp;#25345;&amp;#21345;&amp;#20154;&amp;#31805;&amp;#21517;&amp;#65306;&lt;U&gt;&amp;#12288;&amp;#12288;&amp;#12288;&lt;br /&gt;                  &amp;#65288;&amp;#33287;&amp;#20449;&amp;#29992;&amp;#21345;&amp;#31805;&amp;#21517;&amp;#21516;&amp;#19968;&amp;#33268;&amp;#65289;&lt;/U&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P CLASS="western" style="margin-left: 0.33in"&gt;&lt;br /&gt;&lt;BR&gt;&lt;br /&gt;&lt;/P&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt;	&lt;LI&gt;&lt;P CLASS="western"&gt;&lt;br /&gt;	&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&amp;#37109;&amp;#23616;&amp;#20786;&amp;#37329;&amp;#24115;&amp;#25142;&amp;#36681;&amp;#24115;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;/UL&gt;&lt;br /&gt;&lt;P CLASS="western" ALIGN=JUSTIFY&gt;&lt;br /&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;FONT SIZE=2&gt;&lt;font size="3"&gt;&amp;#25480;&amp;#27402;&amp;#20154;&amp;#30452;&amp;#25509;&amp;#36681;&amp;#24115;&amp;#20184;&amp;#27454;&amp;#39006;&amp;#21029;&amp;#65306;&lt;/font&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;FONT SIZE=2&gt;&lt;font size="3"&gt;(&lt;/font&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;FONT SIZE=2&gt;&lt;font size="3"&gt;&amp;#35531;&amp;#21246;&amp;#36984;&amp;#19968;&amp;#38917;&lt;/font&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;FONT SIZE=2&gt;&lt;font size="3"&gt;)&lt;br /&gt;         &lt;/font&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;FONT SIZE=2&gt;&lt;font size="3"&gt;&amp;#25480;&amp;#27402;&amp;#20154;&amp;#33995;&amp;#31456;&amp;#65306;&lt;/font&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;FONT SIZE=2&gt;(&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;FONT SIZE=2&gt;&amp;#35531;&amp;#33995;&amp;#21407;&amp;#38283;&amp;#25142;&amp;#21360;&amp;#37969;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;FONT SIZE=2&gt;)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P CLASS="western" ALIGN=JUSTIFY style="margin-left: 0.83in"&gt;&lt;br /&gt; &lt;br /&gt;	&lt;P CLASS="western"&gt;&lt;BR&gt;&lt;br /&gt;	&lt;/P&gt;&lt;br /&gt; &amp;#9633; &lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;FONT SIZE=2&gt;&amp;#23384;&amp;#31807;&amp;#20786;&amp;#37329;&amp;#23616;&amp;#34399;&lt;br /&gt;&lt;/FONT&gt; &lt;FONT SIZE=4&gt;&amp;#9633;&amp;#9633;&amp;#9633;&amp;#9633;&amp;#9633;&amp;#9633;&amp;#9472;&amp;#9633;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;br /&gt;&lt;/P&gt;&lt;br /&gt;&lt;P CLASS="western" ALIGN=JUSTIFY style="margin-left: 0.83in"&gt;&lt;br /&gt;     &lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;FONT SIZE=2&gt;&lt;font size="3"&gt;&amp;#23384;&amp;#31807;&amp;#20786;&amp;#37329;&amp;#24115;&amp;#34399;&lt;br /&gt;&lt;/font&gt;&lt;/FONT&gt; &lt;FONT SIZE=4&gt;&lt;font size="5"&gt;&amp;#9633;&amp;#9633;&amp;#9633;&amp;#9633;&amp;#9633;&amp;#9633;&amp;#9472;&amp;#9633;&lt;/font&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P CLASS="western" ALIGN=JUSTIFY style="margin-left: 0.83in"&gt;&lt;br /&gt;  &amp;#9633; &lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;FONT SIZE=2&gt;&lt;font size="3"&gt;&amp;#21123;&amp;#25765;&amp;#20786;&amp;#37329;&amp;#24115;&amp;#34399;&lt;br /&gt; &lt;/font&gt;&lt;/FONT&gt;&lt;FONT SIZE=4&gt;&lt;font size="5"&gt;&amp;#9633;&amp;#9633;&amp;#9633;&amp;#9633;&amp;#9633;&amp;#9633;&amp;#9633;&amp;#9633;&lt;/font&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P CLASS="western" ALIGN=JUSTIFY style="margin-left: 0.83in"&gt;&lt;br /&gt;     &lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;FONT SIZE=2&gt;&amp;#65288;&amp;#36681;&amp;#24115;&amp;#26085;&amp;#65306;&amp;#27599;&amp;#26376;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;FONT SIZE=2&gt;&lt;font size="3"&gt;20&lt;/font&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#27161;&amp;#26999;&amp;#39636;, cursive"&gt;&lt;FONT SIZE=2&gt;&amp;#26085;&amp;#65289;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P CLASS="western" ALIGN=CENTER&gt;&lt;BR&gt;&lt;br /&gt;&lt;/P&gt;&lt;br /&gt;&lt;P CLASS="western" ALIGN=CENTER&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;B&gt;&amp;#35641;&amp;#20195;&amp;#34920;&amp;#25152;&amp;#26377;&amp;#38656;&amp;#35201;&amp;#25903;&amp;#25588;&amp;#65292;&amp;#19988;&amp;#21463;&amp;#24800;&amp;#26044;&amp;#20234;&amp;#30008;&amp;#22522;&amp;#37329;&amp;#26371;&amp;#30340;&amp;#26379;&amp;#21451;&amp;#65292;&amp;#21521;&amp;#24744;&amp;#29563;&amp;#19978;&amp;#26368;&amp;#35488;&amp;#25711;&amp;#30340;&amp;#35613;&amp;#24847;&amp;#12290;&amp;#35613;&amp;#35613;&amp;#24744;&lt;/B&gt;&lt;/FONT&gt;&lt;B&gt;!&lt;/B&gt;&lt;/P&gt;&lt;br /&gt;&lt;P CLASS="western"&gt;&lt;FONT SIZE=2&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;(&lt;br /&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT SIZE=2&gt;&amp;#20659;&amp;#30495;&amp;#65306;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT SIZE=2&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;03-4914935&lt;br /&gt;  &lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT SIZE=2&gt;&amp;#38651;&amp;#35441;&amp;#65306;&lt;br /&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT SIZE=2&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;03-4947341#137-8&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT SIZE=2&gt;&amp;#65292;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT SIZE=2&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;0913622052&lt;br /&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;&lt;FONT SIZE=2&gt;&amp;#20234;&amp;#30008;&amp;#22522;&amp;#37329;&amp;#26371;&amp;#37041;&amp;#23567;&amp;#22992;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT SIZE=2&gt;&lt;FONT FACE="&amp;#26032;&amp;#32048;&amp;#26126;&amp;#39636;, PMingLiU, serif"&gt;)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;br /&gt;&lt;P CLASS="western"&gt;&lt;BR&gt;&lt;br /&gt;&lt;/P&gt;&lt;br /&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-2019256209566153516?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/tPAXj/~4/adT9yVDV3uc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/2019256209566153516/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5113208746101413080&amp;postID=2019256209566153516" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/2019256209566153516?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/2019256209566153516?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/tPAXj/~3/adT9yVDV3uc/blog-post.html" title="伊甸愛心園丁" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://chuiwenchiu-arick.blogspot.com/2009/03/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcNQHo-eCp7ImA9WxJXEEU.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-6809177748443430769</id><published>2008-01-25T17:12:00.000-08:00</published><updated>2009-06-03T21:01:31.450-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-03T21:01:31.450-07:00</app:edited><title /><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GBpUsfl2CFgTPRD-CmJ4CFhPhyU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GBpUsfl2CFgTPRD-CmJ4CFhPhyU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GBpUsfl2CFgTPRD-CmJ4CFhPhyU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GBpUsfl2CFgTPRD-CmJ4CFhPhyU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;    &lt;div class="gmail_quote"&gt;&lt;br&gt;&lt;h1 style="text-align: center;"&gt;No Pain No Gain&lt;/h1&gt;&lt;span class="gmail_quote"&gt;&lt;br&gt;&lt;/span&gt;&lt;span class="gmail_quote"&gt;&lt;br&gt;&lt;br&gt;&lt;/span&gt; &lt;div bgcolor="#ffffff"&gt;  &lt;div&gt; &lt;div style="text-align: center;"&gt;&lt;div style="text-align: center;"&gt;&lt;font size="2"&gt;&lt;font size="3"&gt;&lt;div id="jb59" style="padding: 1em 0pt;"&gt;&lt;img style="width: 430px; height: 414px;" src="http://docs.google.com/File?id=dcxw59mr_3800r7wfrcj"&gt;&lt;/div&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;br&gt; &lt;div style="text-align: center;"&gt;&lt;font size="2"&gt;&lt;font size="3"&gt;&lt;div id="aya0" style="padding: 1em 0pt;"&gt;&lt;img style="width: 429px; height: 414px;" src="http://docs.google.com/File?id=dcxw59mr_3801xw7xkjmm"&gt;&lt;/div&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;    &lt;br&gt; &lt;div style="text-align: center;"&gt;&lt;font size="2"&gt;&lt;font size="3"&gt;&lt;div id="a4k." style="padding: 1em 0pt;"&gt;&lt;img style="width: 430px; height: 419px;" src="http://docs.google.com/File?id=dcxw59mr_3802dntbkwcb"&gt;&lt;/div&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;br&gt; &lt;div style="text-align: center;"&gt;&lt;font size="2"&gt;&lt;font size="3"&gt;&lt;div id="qjuf" style="padding: 1em 0pt;"&gt;&lt;img style="width: 432px; height: 419px;" src="http://docs.google.com/File?id=dcxw59mr_3803cs2kvmcj"&gt;&lt;/div&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt; &lt;br&gt; &lt;div style="text-align: center;"&gt;&lt;font size="2"&gt;&lt;font size="3"&gt;&lt;div id="w53d" style="padding: 1em 0pt;"&gt;&lt;img style="width: 431px; height: 422px;" src="http://docs.google.com/File?id=dcxw59mr_3804ftz2dkg5"&gt;&lt;/div&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;   &lt;br&gt; &lt;div style="text-align: center;"&gt;&lt;font size="2"&gt;&lt;font size="3"&gt;&lt;div id="z0l9" style="padding: 1em 0pt;"&gt;&lt;img style="width: 430px; height: 405px;" src="http://docs.google.com/File?id=dcxw59mr_3805d6cjnhcb"&gt;&lt;/div&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;font size="2"&gt;&lt;font size="3"&gt;&lt;div id="u6wh" style="padding: 1em 0pt;"&gt;&lt;img style="width: 432px; height: 416px;" src="http://docs.google.com/File?id=dcxw59mr_38067z5384dx"&gt;&lt;/div&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;font size="2"&gt;&lt;font size="3"&gt;&lt;div id="lxb2" style="padding: 1em 0pt;"&gt;&lt;img style="width: 430px; height: 411px;" src="http://docs.google.com/File?id=dcxw59mr_3807g5gbswcj"&gt;&lt;/div&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;font size="2"&gt;&lt;font size="3"&gt;&lt;div id="hlc1" style="padding: 1em 0pt;"&gt;&lt;img style="width: 431px; height: 411px;" src="http://docs.google.com/File?id=dcxw59mr_3808ft6q38hk"&gt;&lt;/div&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;font size="2"&gt;&lt;font size="3"&gt;&lt;div id="joa-" style="padding: 1em 0pt;"&gt;&lt;img style="width: 432px; height: 412px;" src="http://docs.google.com/File?id=dcxw59mr_3809ckxfccgx"&gt;&lt;/div&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;font size="2"&gt;&lt;font size="3"&gt;&lt;div id="lwqk" style="padding: 1em 0pt;"&gt;&lt;img style="width: 433px; height: 414px;" src="http://docs.google.com/File?id=dcxw59mr_3810fvnbh5dg"&gt;&lt;/div&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;font size="2"&gt;&lt;font size="3"&gt;&lt;div id="klpv" style="padding: 1em 0pt;"&gt;&lt;img style="width: 444px; height: 415px;" src="http://docs.google.com/File?id=dcxw59mr_3811ggf3zqgj"&gt;&lt;/div&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;font size="2"&gt;&lt;font size="3"&gt;&lt;div id="zmwi" style="padding: 1em 0pt;"&gt;&lt;img style="width: 444px; height: 406px;" src="http://docs.google.com/File?id=dcxw59mr_3812hjs2zjfc"&gt;&lt;br&gt;&lt;/div&gt;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;/div&gt;  &lt;div&gt; &lt;/div&gt;&lt;/div&gt; &lt;div align="center"&gt;&lt;div&gt;&lt;p&gt; &lt;/p&gt;&lt;/div&gt; &lt;div&gt; &lt;blockquote style="margin-top: 5pt; margin-bottom: 5pt;"&gt; &lt;blockquote style="margin-top: 5pt; margin-bottom: 5pt;"&gt; &lt;p&gt; &lt;font size="2"&gt;&lt;span lang="EN-US"&gt;  &lt;br&gt; &lt;/span&gt;&lt;font size="5"&gt;&lt;span lang="EN-US"&gt;&lt;b&gt;&lt;font color="blue"&gt;&lt;span style="color: blue;"&gt;&lt;b&gt;No Pain No Gain… Accept the Pain, Future will be Fruitful…&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;font size="5"&gt; &lt;br&gt;&lt;/font&gt;&lt;/span&gt;  &lt;/font&gt; &lt;font size="2"&gt;&lt;span style="font-size: 10.5pt;" lang="EN-US"&gt;&lt;br&gt;&lt;/span&gt;&lt;/font&gt;&lt;span lang="EN-US"&gt;&lt;br&gt;&lt;/span&gt;&lt;b&gt;&lt;font color="blue" size="5"&gt;&lt;span style="color: blue;" lang="EN-US"&gt;&lt;b&gt;&lt;font size="5"&gt;Don't feel the work you are doing is pain, because there will be always a reason for that pain or work.  &lt;/font&gt;&lt;/b&gt;&lt;/span&gt;&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;/div&gt; &lt;div align="center"&gt; &lt;/div&gt;&lt;/div&gt; &lt;/div&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-6809177748443430769?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/tPAXj/~4/PT5sn_sYNKc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/6809177748443430769/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5113208746101413080&amp;postID=6809177748443430769" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/6809177748443430769?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/6809177748443430769?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/tPAXj/~3/PT5sn_sYNKc/no-pain-no-gain-no-pain-no-gain-accept.html" title="" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://chuiwenchiu-arick.blogspot.com/2008/01/no-pain-no-gain-no-pain-no-gain-accept.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcNQHo-eyp7ImA9WxJXEEU.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-8997709152928443218</id><published>2007-10-25T22:59:00.000-07:00</published><updated>2009-06-03T21:01:31.453-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-03T21:01:31.453-07:00</app:edited><title /><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-5EUEcrQGZLXQjmIploWRQcW7oc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-5EUEcrQGZLXQjmIploWRQcW7oc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-5EUEcrQGZLXQjmIploWRQcW7oc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-5EUEcrQGZLXQjmIploWRQcW7oc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="text-align: center;"&gt;   &lt;h1&gt;     簡單快速取出 chm 中的圖片   &lt;/h1&gt; &lt;/div&gt; &lt;a href="http://chuiwenchiu.spaces.live.com/" title="MSN Space"&gt;&lt;u&gt;&lt;font color="#800080"&gt;&lt;i&gt;MSN Space&lt;/i&gt;&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;i&gt;、&lt;/i&gt;&lt;a href="Doc?id=dcxw59mr_3411dbfh32" target="_blank" title="Google Doc"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;&lt;i&gt;Google Doc&lt;/i&gt;&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;i&gt;、&lt;/i&gt;&lt;a href="http://chuiwenchiu-arick.blogspot.com/" title="Google Blog"&gt;&lt;u&gt;&lt;font color="#800080"&gt;&lt;i&gt;Google Blog&lt;/i&gt;&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;br&gt; &lt;i&gt;Chui-Wen Chiu&lt;/i&gt;&lt;br style="font-style: italic;"&gt; &lt;i&gt;2007.10.26&lt;/i&gt;&lt;br style="font-style: italic;"&gt; &lt;i&gt;關鍵字：chm&lt;/i&gt;&lt;br&gt; &lt;br&gt; &lt;b&gt;測試環境&lt;/b&gt;&lt;br&gt; 1. Windows XP SP2&lt;br&gt; 2. HTML Help Control 4.74.9273&lt;br&gt; &lt;br&gt;     不知道你有沒有常看 chm 電子書，有時裡面有些不錯圖片想要取出來，可是 Microsoft HTML Help 程式卻沒有提供按右鍵另存功能。網路有提供 chm 轉檔工具，可是有時只需要裡面的一兩張圖片，實在沒有必要使用這些工具。這裡提供一個簡單的方式，首先打開你的 chm 並找出你想要另存的圖片，按下滑鼠右鍵點選"屬性"，如下：&lt;br&gt; &lt;div id="bdho" style="padding: 1em 0pt; text-align: left;"&gt;   &lt;div id="ru_r" style="padding: 1em 0pt; text-align: left;"&gt;     &lt;img src="http://docs.google.com/File?id=dcxw59mr_3413gxztf68q" style="width: 548px; height: 430px;"&gt;&lt;br&gt;     &lt;br&gt;     然後在"內容"視窗中，複製網址，如下：&lt;br&gt;     &lt;div id="d03-" style="padding: 1em 0pt; text-align: left;"&gt;       &lt;img src="http://docs.google.com/File?id=dcxw59mr_3414fb97bvg7" style="width: 403px; height: 422px;"&gt;     &lt;/div&gt;     &lt;br&gt;     然後打開檔案總管，將網址貼在網址列，然後按右鍵另存即可，是不是很簡單呢 ^^&lt;br&gt;   &lt;/div&gt; &lt;/div&gt; &lt;img src="http://docs.google.com/File?id=dcxw59mr_3417c22n3ggc" style="width: 663px; height: 366px;"&gt; &lt;div id="r9bw" style="padding: 1em 0pt; text-align: left;"&gt; &lt;/div&gt; &lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-8997709152928443218?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/tPAXj/~4/DR9XM-sl_Zs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/8997709152928443218/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5113208746101413080&amp;postID=8997709152928443218" title="3 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/8997709152928443218?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/8997709152928443218?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/tPAXj/~3/DR9XM-sl_Zs/chm-msn-space-google-doc-google-blog.html" title="" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://chuiwenchiu-arick.blogspot.com/2007/10/chm-msn-space-google-doc-google-blog.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcNQHo-fyp7ImA9WxJXEEU.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-3678991444541419620</id><published>2007-10-25T11:31:00.001-07:00</published><updated>2009-06-03T21:01:31.457-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-03T21:01:31.457-07:00</app:edited><title /><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BR7kQ6rY65xf44raqYSsi4V7zUE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BR7kQ6rY65xf44raqYSsi4V7zUE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BR7kQ6rY65xf44raqYSsi4V7zUE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BR7kQ6rY65xf44raqYSsi4V7zUE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;h1 style="text-align: center;"&gt;   VS2008 對 Javascript 的支援 &lt;/h1&gt; &lt;br style="font-style: italic;"&gt; &lt;p&gt;   &lt;a href="http://chuiwenchiu.spaces.live.com/" title="MSN Space"&gt;&lt;u&gt;&lt;font color="#800080"&gt;&lt;i&gt;MSN Space&lt;/i&gt;&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;i&gt;、&lt;/i&gt;&lt;a href="Edit?tab=edit&amp;amp;dr=true&amp;amp;docid=dcxw59mr_3383hrxfwd" title="Google Doc"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;&lt;i&gt;Google Doc&lt;/i&gt;&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;i&gt; 、&lt;/i&gt;&lt;a href="http://chuiwenchiu-arick.blogspot.com/" title="Google Blog"&gt;&lt;u&gt;&lt;font color="#800080"&gt;&lt;i&gt;Google Blog&lt;/i&gt;&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; &lt;/p&gt; &lt;i&gt; Chui-Wen Chiu&lt;/i&gt;&lt;br style="font-style: italic;"&gt; &lt;i&gt;2007.10.24&lt;/i&gt;&lt;br style="font-style: italic;"&gt; &lt;i&gt;關鍵字：debug, visual studio, javascript, intellisense&lt;/i&gt;&lt;br&gt; &lt;h2&gt;   前言 &lt;/h2&gt;     今天參加高雄場次的微軟研討會，第一場由曹祖聖主講 VS2008 對 Javascript 的支援，內容提到一些不錯和有待改進的部份整理成本篇文章，由於目前 VS2008 還處於 Beta2 版本，所以未來可能還會進行修改或強化。&lt;br&gt; &lt;h2&gt;   Javascript Intellisense &lt;/h2&gt;     VS2008 採用型別推測(type inference)方式來支援 Javascript 的 Intellisense，透過此一方式可以讓開發人員更容易找到變數/物件的成員，這個方法的缺點是如果無法正常推測初結果，則必須手動輸入，且此一方式需要花額外時間進行推測，所以，Intenllisense 需要一段時間才能夠呈現。除此之外，VS2008 也支援 HTML 中部引入外部的 js 檔，即使外部檔案位在其他網站，也仍然能夠使用(但是需要花一些時間)。如下圖：&lt;br&gt; &lt;div id="igfy" style="padding: 1em 0pt; text-align: center;"&gt;   &lt;img src="http://docs.google.com/File?id=dcxw59mr_3384dck3pxf7" height="220" width="336"&gt;&lt;br&gt;   圖1、Javascript Intellisense[1]&lt;br&gt; &lt;/div&gt; &lt;br&gt;     如果 HTML 中引入多個 js 檔案，為了 js 檔可以顯示其他 js 的 intellisense，必須在 js 檔的最開頭加上下面的相依宣告：&lt;br&gt; &lt;div&gt;   &lt;table id="f2ev" bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         /// &amp;lt;reference&lt;br&gt;         ///   path="~/scripts/mylib.js"&lt;br&gt;         ///   assembly="System.Web"&lt;br&gt;         ///   name="ScriptResourceName.js"&lt;br&gt;         /// /&amp;gt;&lt;br&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt; 其中 path 屬性用來定義引用的 js 檔案路徑，如果你使用 .NET 的組件，可透過 assembly 和 name 屬性指定 .NET 組件。如果忽略 assembly 屬性，預設為 System.Web.Extensions。&lt;br&gt; &lt;br&gt;     為了讓 Intellisense 支援說明，必須在定義的函數、物件或欄位中定義 XML 說明註解(註：註解說明位置和 C# 不同)。如：&lt;br&gt; &lt;br&gt; &lt;div&gt;   &lt;table id="f2ev" bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         function getWelcomeMessage(name){&lt;br&gt;           /// &amp;lt;summary&amp;gt;&lt;br&gt;           /// 這個函數是用來根據使用者姓名，自動產生歡迎文字&lt;br&gt;           /// &amp;lt;/summary&amp;gt;&lt;br&gt;           /// &amp;lt;param name="name"&amp;gt;使用者姓名&amp;lt;/name&amp;gt;&lt;br&gt;           /// &amp;lt;return&amp;gt;string&amp;lt;/return&amp;gt;&lt;br&gt;         &lt;br&gt;           return "歡迎 " + name;&lt;br&gt;         }&lt;br&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt; &lt;br&gt; 執行結果：&lt;br&gt; &lt;div id="nka8" style="padding: 1em 0pt; text-align: center;"&gt;   &lt;div style="text-align: center;"&gt;   &lt;/div&gt;   &lt;div id="l:yr" style="padding: 1em 0pt; text-align: center;"&gt;     &lt;img src="http://docs.google.com/File?id=dcxw59mr_3393hqtrk6gz" height="226" width="438"&gt;&lt;br&gt;     圖2、函數說明提示[1]&lt;br&gt;     &lt;br&gt;   &lt;/div&gt;   &lt;img src="http://docs.google.com/File?id=dcxw59mr_3386ddm9cfhp" height="227" width="433"&gt;&lt;br&gt;   圖3、參數說明提示[1]&lt;br&gt; &lt;/div&gt; 以下是常用的 XML 註解：&lt;br&gt; &lt;b&gt;函數參數&lt;br&gt; &lt;/b&gt;&lt;img alt=""&gt;&lt;img alt=""&gt;&lt;br&gt; &lt;div&gt;   &lt;table id="f2ev" bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         &amp;lt;param&lt;br&gt;             name="參數名稱"&lt;br&gt;             mayBeNull="true|false"&lt;br&gt;             optional="true|false"&lt;br&gt;             type="參數型別"&lt;br&gt;             parameterArray="true|false"&lt;br&gt;             integer="true|false"&lt;br&gt;             domElement="true|false"&lt;br&gt;         &lt;br&gt;             elementType="陣列元素型別"&lt;br&gt;             elementInteger="true|false"&lt;br&gt;             elementDomElement="true|false"&lt;br&gt;             elementMayBeNull="true|false"&amp;gt;&lt;br&gt;         &lt;br&gt;             參數說明文字&lt;br&gt;         &amp;lt;/param&amp;gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt; &lt;br&gt; 在定義數值說明時，可以使用 type, integer, domElement 和 mayBeNull。由於 JavaScript 沒有 integer 型別，只有 number 型別，所以可以將 type 設成 Number，integer 設成 true，來表示整數型別。可省略參數用 optional ="true"。參數如果可以重覆出現可將 parameterArray 設為 "true"。&lt;br&gt; &lt;br&gt; &lt;b&gt;陣列說明&lt;/b&gt;&lt;br&gt; &lt;p&gt;   &lt;DIV:SHAPE&gt;="_x0000_s1026"&amp;gt; &lt;/DIV:SHAPE&gt; &lt;/p&gt; &lt;div class="O"&gt;   因為 JavaScript 並沒有類似 int[] 這樣的陣列宣告，因此在定義說明時，可以使用 elementType, elementInteger, elementDomElement 和 elementMayBeNull 來定義陣列的說明。&lt;br&gt; &lt;/div&gt; &lt;br&gt; &lt;b&gt;函數回傳值&lt;/b&gt;&lt;br&gt; &amp;lt;returns&lt;br&gt;     type="傳回值型別"&lt;br&gt;     integer="true|false"&lt;br&gt;     domElement="true|false"&lt;br&gt;     mayBeNull="true|false"&lt;br&gt; &lt;br&gt;     elementType="陣列元素型別"&lt;br&gt;     elementInteger="true|false"&lt;br&gt;     elementDomElement="true|false"&lt;br&gt;     elementMayBeNull="true|false"&amp;gt;&lt;br&gt;     傳回值說明文字&lt;br&gt; &amp;lt;/returns&amp;gt;&lt;br&gt; 元素和函數參數相同不贅述。&lt;br&gt; &lt;br&gt; &lt;b&gt;屬性&lt;/b&gt;&lt;br&gt; &amp;lt;value&lt;br&gt;     type="數值型別"&lt;br&gt;     integer="true|false"&lt;br&gt;     domElement="true|false"&lt;br&gt;     mayBeNull="true|false"&lt;br&gt; &lt;br&gt;     elementType="陣列元素型別"&lt;br&gt;     elementInteger="true|false"&lt;br&gt;     elementDomElement="true|false"&lt;br&gt;     elementMayBeNull="true|false"&lt;br&gt;     locid="descriptionID"&amp;gt;&lt;br&gt; &lt;br&gt;     屬性說明文字&lt;br&gt; &amp;lt;/value&amp;gt;&lt;br&gt; 元素和函數參數相同不贅述。&lt;br&gt; &lt;br&gt; &lt;b&gt;欄位&lt;br&gt; &lt;/b&gt;&amp;lt;field &lt;br&gt;     name="欄位名稱"&lt;br&gt;     type="欄位型別"&lt;br&gt;     integer="true|false"&lt;br&gt;     domElement="true|false"&lt;br&gt;     mayBeNull="true|false"&lt;br&gt; &lt;br&gt;     elementType="陣列元素型別"&lt;br&gt;     elementInteger="true|false"&lt;br&gt;     elementDomElement="true|false"&lt;br&gt;     elementMayBeNull="true|false"&lt;br&gt;     locid="descriptionID"&amp;gt;欄位說明文字&lt;br&gt; &amp;lt;/field&amp;gt;&lt;b&gt;&lt;br&gt; &lt;/b&gt;元素和函數參數相同不贅述。&lt;br&gt; &lt;h2&gt;   &lt;b&gt;AJAX, ASP.NET, Web Service 對 Javascript Intellisense 支援&lt;/b&gt; &lt;/h2&gt; &lt;h2&gt; &lt;/h2&gt; &lt;p&gt;   雖然 ASP.NET 也可直接印入 js 檔，但官方建議透過 ScriptManager 引用，引入之後即可獲得相同支援。如下：&lt;br&gt; &lt;/p&gt; &lt;div&gt;   &lt;table id="pfei" bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         &amp;lt;asp:ScriptManager ID="ScriptManager1" runat="server"&amp;gt;&lt;br&gt;           &amp;lt;Scripts&amp;gt;&lt;br&gt;             &amp;lt;asp:ScriptReference Path="~/MyLib.js" /&amp;gt;&lt;br&gt;             &amp;lt;asp:ScriptReference Path="~/jQuery.js" /&amp;gt;&lt;br&gt;           &amp;lt;/Scripts&amp;gt;&lt;br&gt;         &amp;lt;/asp:ScriptManager&amp;gt;&lt;br&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt; &lt;p&gt;   &lt;br&gt; &lt;/p&gt; &lt;p&gt;   如果想在引入 Web Services 中的 js，首先，在 Web Service 中必須加入 System.Web.Script.Services.ScriptService Attribute，如下： &lt;/p&gt; &lt;p&gt;     &lt;/p&gt; &lt;div&gt;   &lt;table id="kalb" bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         [System.Web.Script.Services.ScriptServie()]&lt;br&gt;         [WebService(Namespace="http://tempuri.org")]&lt;br&gt;         public class WebService: System.Web.Services.WebService{&lt;br&gt;           [WebMethod()]&lt;br&gt;           public String Hello(){&lt;br&gt;             return "Hello World";&lt;br&gt;           }&lt;br&gt;         }&lt;br&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt; &lt;p&gt;   &lt;br&gt; &lt;/p&gt; &lt;p&gt;   接著在 ASP.NET 的 ScriptManager 中加入 Services 即可獲得支援，如下： &lt;/p&gt; &lt;p&gt;   &lt;br&gt; &lt;/p&gt; &lt;div&gt;   &lt;table id="pfei" bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         &amp;lt;asp:ScriptManager ID="ScriptManager1" runat="server"&amp;gt;&lt;br&gt;           &amp;lt;Services&amp;gt;&lt;br&gt;             &amp;lt;asp:ScriptReference Path="~/MyLib.asmx" /&amp;gt;   &lt;br&gt;           &amp;lt;/Services&amp;gt;&lt;br&gt;         &amp;lt;/asp:ScriptManager&amp;gt;&lt;br&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt; &lt;br&gt; &lt;p&gt;   在 AJAX 上，AJAX Client Behavior, AJAX Client Control 和 AJAX Client Library 使用上也支援 Javascript Intenllisense。&lt;br&gt; &lt;/p&gt; &lt;div id="p70o" style="padding: 1em 0pt; text-align: center;"&gt;   &lt;div id="piq:" style="padding: 1em 0pt;"&gt;     &lt;img src="http://docs.google.com/File?id=dcxw59mr_3395837tnhc" style="width: 684px; height: 421px;"&gt;&lt;br&gt;     &lt;div style="text-align: center;"&gt;       圖4、AJAX 的支援[1]&lt;br&gt;     &lt;/div&gt;   &lt;/div&gt; &lt;/div&gt; &lt;p&gt;     &lt;/p&gt; &lt;h2&gt;   Javascript 偵錯 &lt;/h2&gt; VS2008 要對 IE 進行偵錯，必須在 IE 上關閉"停用程式碼除錯"選項(VS2005 或 Visual Script Debugger 相同)。如未關閉可能出現如下提示訊息：&lt;br&gt; &lt;div id="r5zj" style="padding: 1em 0pt;"&gt;   &lt;div style="text-align: center;"&gt;     &lt;img src="http://docs.google.com/File?id=dcxw59mr_3387gbg429cz" style="width: 553px; height: 210px;"&gt;&lt;br&gt;   &lt;/div&gt;   &lt;div&gt;     &lt;div style="text-align: center;"&gt;       圖5、除錯關閉提示[1]&lt;br&gt;     &lt;/div&gt;     &lt;div style="text-align: left;"&gt;       &lt;br&gt;       關閉方式如下圖所示：&lt;br&gt;     &lt;/div&gt;   &lt;/div&gt;   &lt;div id="z1-f" style="padding: 1em 0pt; text-align: center;"&gt;     &lt;img src="http://docs.google.com/File?id=dcxw59mr_3388t3p2zfxk" style="width: 413px; height: 511px;"&gt;&lt;br&gt;     圖6、關閉除錯停用選項[1]&lt;br&gt;   &lt;/div&gt;   &lt;b&gt;語法錯誤提示&lt;/b&gt;&lt;br&gt; &lt;/div&gt; 當你透過 Visual Studio 編輯 Javascript 時，會即時檢查語法的正確性，如果你用 VS2005 編輯 C# 就會相當熟悉這個通能，他會在語法錯誤之處會標示提醒符號，如下圖：&lt;br&gt; &lt;div id="jaan" style="padding: 1em 0pt; text-align: center;"&gt;   &lt;img src="http://docs.google.com/File?id=dcxw59mr_3396zxhjz3gb" height="355" width="544"&gt; &lt;/div&gt; &lt;div style="text-align: center;"&gt;   圖7、語法檢查[1]&lt;br&gt; &lt;/div&gt; &lt;b&gt;中斷點&lt;/b&gt;&lt;br&gt; &lt;br&gt; 可在程式中設定中斷點，如同 C# 程式一般，像是條件式中斷、hit count 中斷等，也可在中斷時，透過 Call Stack, 區域視窗, 即時監看視窗, Visualizer 等檢查相關的參數狀態，如下圖：&lt;br&gt; &lt;div id="s5bh" style="padding: 1em 0pt;"&gt;   &lt;div style="text-align: center;"&gt;     &lt;img src="http://docs.google.com/File?id=dcxw59mr_3397dqx58rtr" height="387" width="548"&gt;&lt;br&gt;     圖8、中斷點[1]&lt;br&gt;   &lt;/div&gt;   &lt;div id="x2u8" style="padding: 1em 0pt;"&gt;     &lt;div style="text-align: center;"&gt;       &lt;img src="http://docs.google.com/File?id=dcxw59mr_3398g73335c2" style="width: 490px; height: 209px;"&gt;&lt;br&gt;       圖9、各種除錯視窗[1]&lt;br&gt;     &lt;/div&gt;     &lt;div id="b-k_" style="padding: 1em 0pt;"&gt;       &lt;div style="text-align: center;"&gt;         &lt;img src="http://docs.google.com/File?id=dcxw59mr_33998x9nfqcj" style="width: 398px; height: 221px;"&gt;&lt;br&gt;       &lt;/div&gt;       &lt;div style="text-align: center;"&gt;         圖10、Visualizer [1]&lt;br&gt;       &lt;/div&gt;       &lt;h2&gt;         偵測外部網頁       &lt;/h2&gt;           這個功能我覺得是這個主題中相當重要的一部分，這個主要用來偵錯已經在運作中的網頁 Javascript 功能，雖然 VS2005 也有類似的功能，但不像 VS2008 這麼強大，他可將指定的網址相關檔案下載下來，並在 VS 中呈現目前的內容，並且會依據實際情況變更。所以，如果你要研究某個網站的 Javascript 如何撰寫，只要透過這個方式將網頁資料透過 VS 偵測，並利用剛剛說的中斷點和其他除錯視窗，就是一個強大的 Hack 工具。唯一美中不足的是無法動態修改程式碼。希望未來能夠提供此功能。&lt;br&gt;       &lt;br&gt;           由於沒有 VS2008 可抓圖展示，就以投影片的內容整理如下：&lt;br&gt;       &lt;br&gt;       &lt;b&gt;啟動外部偵錯&lt;/b&gt;&lt;br&gt;       1. 使用 IE 瀏覽網頁&lt;br&gt;       2. 使用 Visual Studio 2008 將 IE 的行程 (iexplorer.exe) 附加到偵錯模式下&lt;br&gt;       &lt;div id="aftm" style="padding: 1em 0pt; text-align: center;"&gt;         &lt;img src="http://docs.google.com/File?id=dcxw59mr_3390fqgqc9c5" height="343" width="536"&gt;       &lt;/div&gt;       &lt;div style="text-align: center;"&gt;         圖11、VS 附加到指定 IE 行程 [1]       &lt;/div&gt;       3. VS 會下載相關檔案到 Script Document&lt;br&gt;       &lt;div id="xk5k" style="padding: 1em 0pt; text-align: center;"&gt;         &lt;img src="http://docs.google.com/File?id=dcxw59mr_3400ckhgshhh" height="277" width="201"&gt;&lt;br&gt;         圖12、Script document [1]&lt;br&gt;       &lt;/div&gt;       &lt;br&gt;       4. 開啓檔案&lt;br&gt;       4. 設定中斷點&lt;br&gt;       5. 進行偵錯&lt;br&gt;       &lt;div id="ryn1" style="padding: 1em 0pt; text-align: center;"&gt;         &lt;img src="http://docs.google.com/File?id=dcxw59mr_3401pz2b5rfm" style="width: 642px; height: 448px;"&gt;       &lt;/div&gt;       &lt;div style="text-align: center;"&gt;         圖13、Script document [1]       &lt;/div&gt;     &lt;/div&gt;   &lt;/div&gt; &lt;/div&gt; &lt;h2&gt;   常見問題 &lt;/h2&gt; &lt;b&gt;1. 是否支援物件的 Intellisense?&lt;/b&gt;&lt;br&gt; 是&lt;br&gt; &lt;br&gt; &lt;b&gt;2. 是否支援物件的程式碼註解格式？&lt;/b&gt;&lt;br&gt; 是&lt;br&gt; &lt;br&gt; &lt;b&gt;3. 是否支援 Reference To 到函數或物件的功能？&lt;/b&gt;&lt;br&gt; 否，尚未支援&lt;br&gt; &lt;br&gt; &lt;b&gt;4. VS2008 的 Javascript 註解格式是否可以產生文件？&lt;/b&gt;&lt;br&gt; 目前尚未支援&lt;br&gt; &lt;br&gt; &lt;b&gt;5. 是否可關閉 Intellisense 功能？&lt;/b&gt;&lt;br&gt; 否，沒有提供選項設定。&lt;br&gt; &lt;br&gt; &lt;b&gt;6. 可偵錯 Silverlight 嗎？&lt;/b&gt;&lt;br&gt; 是&lt;br&gt; &lt;br style="font-weight: bold;"&gt; &lt;b&gt;7. 現有的 javaDoc 註解格式是否支援 Intellisense 或提供轉換工具？&lt;/b&gt;&lt;br&gt; 否，可透過 Open Source 尋找看看&lt;br&gt; &lt;br&gt; &lt;b&gt;8. 可支援 Firefox 上的偵錯嗎？&lt;/b&gt;&lt;br&gt; 否&lt;br&gt; &lt;h2&gt;   參考資料 &lt;/h2&gt; [1] 曹祖聖, "&lt;a href="http://teacher.allok.com.tw/%AC%E3%B0Q%B7%7C%B8%EA%AE%C6/%B2%60%A4J%20Visual%20Studio%202008%20JavaScript%20%B0%BB%BF%F9%A7%DE%B3N.zip" id="gp6_" title="深入 Visual Studio 2008 Javascript 偵錯技術投影片"&gt;深入 Visual Studio 2008 Javascript 偵錯技術投影片&lt;/a&gt; "&lt;br&gt; &lt;p&gt;   &lt;DIV:SHAPE&gt;[2] "&lt;/DIV:SHAPE&gt;&lt;a href="http://blogs.msdn.com/kaevans/archive/2007/08/10/javascript-debugging-in-visual-studio-2008.aspx" id="pa1x" title="Debug JavaScript in JSP or PHP Pages with Visual Studio 2008"&gt;Debug JavaScript in JSP or PHP Pages with Visual Studio 2008&lt;/a&gt;" &lt;/p&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;   &lt;DIV:SHAPE&gt; &lt;/DIV:SHAPE&gt;   &lt;div&gt;     [3] "&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/07/19/vs-2008-javascript-debugging.aspx" id="d8x9" title="VS 2008 JavaScript Debugging"&gt;VS 2008 JavaScript Debugging&lt;/a&gt;"   &lt;/div&gt;   &lt;div&gt;     [4] "&lt;a href="http://www.opensourceconnections.com/2007/09/01/javascript-intellisense-documentation-visual-studio-2008-orcas/" id="a223" title="Javascript Intellisense, Documentation, &amp;amp; Visual Studio 2008 (Orcas)"&gt;Javascript Intellisense, Documentation, &amp;amp; Visual Studio 2008 (Orcas)&lt;/a&gt;"   &lt;/div&gt; &lt;/div&gt; &lt;DIV:SHAPE&gt; &lt;/DIV:SHAPE&gt; &lt;DIV:SHAPE&gt; &lt;/DIV:SHAPE&gt; &lt;div&gt;   [5] "&lt;a href="http://blogs.msdn.com/webdevtools/archive/2007/03/02/jscript-intellisense-in-orcas.aspx%20%20" id="o545" title="JScript IntelliSense in Visual Studio Orcas"&gt;JScript IntelliSense in Visual Studio Orcas&lt;/a&gt;"&lt;br&gt;   &lt;br&gt; &lt;/div&gt; &lt;br&gt; &lt;div id="ot_y" style="padding: 1em 0pt; text-align: left;"&gt;   &lt;br&gt; &lt;/div&gt; &lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-3678991444541419620?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/tPAXj/~4/nqsoa3dD5kw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/3678991444541419620/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5113208746101413080&amp;postID=3678991444541419620" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/3678991444541419620?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/3678991444541419620?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/tPAXj/~3/nqsoa3dD5kw/vs2008-javascript-msn-space-google-doc.html" title="" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://chuiwenchiu-arick.blogspot.com/2007/10/vs2008-javascript-msn-space-google-doc.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcNQHo9eip7ImA9WxJXEEU.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-3925846046258461419</id><published>2007-10-25T11:31:00.000-07:00</published><updated>2009-06-03T21:01:31.462-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-03T21:01:31.462-07:00</app:edited><title /><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ICnwnLcebzXD6lyZEMrjPCqluIA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ICnwnLcebzXD6lyZEMrjPCqluIA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ICnwnLcebzXD6lyZEMrjPCqluIA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ICnwnLcebzXD6lyZEMrjPCqluIA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h1 style="text-align: center;"&gt;   VS2008 對 Javascript 的支援 &lt;/h1&gt;&lt;br style="font-style: italic;"&gt;&lt;p&gt;   &lt;a href="http://chuiwenchiu.spaces.live.com/" title="MSN Space"&gt;&lt;u&gt;&lt;font color="#800080"&gt;&lt;i&gt;MSN Space&lt;/i&gt;&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;i&gt;、&lt;/i&gt;&lt;a href="Edit?tab=edit&amp;amp;dr=true&amp;amp;docid=dcxw59mr_3383hrxfwd" title="Google Doc"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;&lt;i&gt;Google Doc&lt;/i&gt;&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;i&gt; 、&lt;/i&gt;&lt;a href="http://chuiwenchiu-arick.blogspot.com/" title="Google Blog"&gt;&lt;u&gt;&lt;font color="#800080"&gt;&lt;i&gt;Google Blog&lt;/i&gt;&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; &lt;/p&gt;&lt;i&gt; Chui-Wen Chiu&lt;/i&gt;&lt;br style="font-style: italic;"&gt;&lt;i&gt;2007.10.24&lt;/i&gt;&lt;br style="font-style: italic;"&gt;&lt;i&gt;關鍵字：debug, visual studio, javascript, intellisense&lt;/i&gt;&lt;br&gt; &lt;h2&gt;   前言 &lt;/h2&gt;     今天參加高雄場次的微軟研討會，第一場由曹祖聖主講 VS2008 對 Javascript 的支援，內容提到一些不錯和有待改進的部份整理成本篇文章，由於目前 VS2008 還處於 Beta2 版本，所以未來可能還會進行修改或強化。&lt;br&gt; &lt;h2&gt;   Javascript Intellisense &lt;/h2&gt;     VS2008 採用型別推測(type inference)方式來支援 Javascript 的 Intellisense，透過此一方式可以讓開發人員更容易找到變數/物件的成員，這個方法的缺點是如果無法正常推測初結果，則必須手動輸入，且此一方式需要花額外時間進行推測，所以，Intenllisense 需要一段時間才能夠呈現。除此之外，VS2008 也支援 HTML 中部引入外部的 js 檔，即使外部檔案位在其他網站，也仍然能夠使用(但是需要花一些時間)。如下圖：&lt;br&gt; &lt;div id="igfy" style="padding: 1em 0pt; text-align: center;"&gt;   &lt;img src="http://docs.google.com/File?id=dcxw59mr_3384dck3pxf7" height="220" width="336"&gt;&lt;br&gt;   圖1、Javascript Intellisense[1]&lt;br&gt; &lt;/div&gt; &lt;br&gt;     如果 HTML 中引入多個 js 檔案，為了 js 檔可以顯示其他 js 的 intellisense，必須在 js 檔的最開頭加上下面的相依宣告：&lt;br&gt; &lt;div&gt;   &lt;table id="f2ev" bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         /// &amp;lt;reference&lt;br&gt;         ///   path="~/scripts/mylib.js"&lt;br&gt;         ///   assembly="System.Web"&lt;br&gt;         ///   name="ScriptResourceName.js"&lt;br&gt;         /// /&amp;gt;&lt;br&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt; 其中 path 屬性用來定義引用的 js 檔案路徑，如果你使用 .NET 的組件，可透過 assembly 和 name 屬性指定 .NET 組件。如果忽略 assembly 屬性，預設為 System.Web.Extensions。&lt;br&gt; &lt;br&gt;     為了讓 Intellisense 支援說明，必須在定義的函數、物件或欄位中定義 XML 說明註解(註：註解說明位置和 C# 不同)。如：&lt;br&gt; &lt;br&gt; &lt;div&gt;   &lt;table id="f2ev" bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         function getWelcomeMessage(name){&lt;br&gt;           /// &amp;lt;summary&amp;gt;&lt;br&gt;           /// 這個函數是用來根據使用者姓名，自動產生歡迎文字&lt;br&gt;           /// &amp;lt;/summary&amp;gt;&lt;br&gt;           /// &amp;lt;param name="name"&amp;gt;使用者姓名&amp;lt;/name&amp;gt;&lt;br&gt;           /// &amp;lt;return&amp;gt;string&amp;lt;/return&amp;gt;&lt;br&gt;         &lt;br&gt;           return "歡迎 " + name;&lt;br&gt;         }&lt;br&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt; &lt;br&gt; 執行結果：&lt;br&gt; &lt;div id="nka8" style="padding: 1em 0pt; text-align: center;"&gt;   &lt;div style="text-align: center;"&gt;   &lt;/div&gt;   &lt;div id="l:yr" style="padding: 1em 0pt; text-align: center;"&gt;     &lt;img src="http://docs.google.com/File?id=dcxw59mr_3393hqtrk6gz" height="226" width="438"&gt;&lt;br&gt;     圖2、函數說明提示[1]&lt;br&gt;     &lt;br&gt;   &lt;/div&gt;   &lt;img src="http://docs.google.com/File?id=dcxw59mr_3386ddm9cfhp" height="227" width="433"&gt;&lt;br&gt;   圖3、參數說明提示[1]&lt;br&gt; &lt;/div&gt; 以下是常用的 XML 註解：&lt;br&gt; &lt;b&gt;函數參數&lt;br&gt; &lt;/b&gt;&lt;img alt=""&gt;&lt;img alt=""&gt;&lt;br&gt; &lt;div&gt;   &lt;table id="f2ev" bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         &amp;lt;param&lt;br&gt;             name="參數名稱"&lt;br&gt;             mayBeNull="true|false"&lt;br&gt;             optional="true|false"&lt;br&gt;             type="參數型別"&lt;br&gt;             parameterArray="true|false"&lt;br&gt;             integer="true|false"&lt;br&gt;             domElement="true|false"&lt;br&gt;         &lt;br&gt;             elementType="陣列元素型別"&lt;br&gt;             elementInteger="true|false"&lt;br&gt;             elementDomElement="true|false"&lt;br&gt;             elementMayBeNull="true|false"&amp;gt;&lt;br&gt;         &lt;br&gt;             參數說明文字&lt;br&gt;         &amp;lt;/param&amp;gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt; &lt;br&gt; 在定義數值說明時，可以使用 type, integer, domElement 和 mayBeNull。由於 JavaScript 沒有 integer 型別，只有 number 型別，所以可以將 type 設成 Number，integer 設成 true，來表示整數型別。可省略參數用 optional ="true"。參數如果可以重覆出現可將 parameterArray 設為 "true"。&lt;br&gt; &lt;br&gt; &lt;b&gt;陣列說明&lt;/b&gt;&lt;br&gt; &lt;p&gt;   &lt;div:shape&gt;="_x0000_s1026"&amp;gt; &lt;/div:shape&gt;&lt;/p&gt; &lt;div class="O"&gt;   因為 JavaScript 並沒有類似 int[] 這樣的陣列宣告，因此在定義說明時，可以使用 elementType, elementInteger,   elementDomElement 和 elementMayBeNull 來定義陣列的說明。&lt;br&gt; &lt;/div&gt; &lt;br&gt; &lt;b&gt;函數回傳值&lt;/b&gt;&lt;br&gt; &amp;lt;returns&lt;br&gt;     type="傳回值型別"&lt;br&gt;     integer="true|false"&lt;br&gt;     domElement="true|false"&lt;br&gt;     mayBeNull="true|false"&lt;br&gt; &lt;br&gt;     elementType="陣列元素型別"&lt;br&gt;     elementInteger="true|false"&lt;br&gt;     elementDomElement="true|false"&lt;br&gt;     elementMayBeNull="true|false"&amp;gt;&lt;br&gt;     傳回值說明文字&lt;br&gt; &amp;lt;/returns&amp;gt;&lt;br&gt; 元素和函數參數相同不贅述。&lt;br&gt; &lt;br&gt; &lt;b&gt;屬性&lt;/b&gt;&lt;br&gt; &amp;lt;value&lt;br&gt;     type="數值型別"&lt;br&gt;     integer="true|false"&lt;br&gt;     domElement="true|false"&lt;br&gt;     mayBeNull="true|false"&lt;br&gt; &lt;br&gt;     elementType="陣列元素型別"&lt;br&gt;     elementInteger="true|false"&lt;br&gt;     elementDomElement="true|false"&lt;br&gt;     elementMayBeNull="true|false"&lt;br&gt;     locid="descriptionID"&amp;gt;&lt;br&gt; &lt;br&gt;     屬性說明文字&lt;br&gt; &amp;lt;/value&amp;gt;&lt;br&gt; 元素和函數參數相同不贅述。&lt;br&gt; &lt;br&gt; &lt;b&gt;欄位&lt;br&gt; &lt;/b&gt;&amp;lt;field &lt;br&gt;     name="欄位名稱"&lt;br&gt;     type="欄位型別"&lt;br&gt;     integer="true|false"&lt;br&gt;     domElement="true|false"&lt;br&gt;     mayBeNull="true|false"&lt;br&gt; &lt;br&gt;     elementType="陣列元素型別"&lt;br&gt;     elementInteger="true|false"&lt;br&gt;     elementDomElement="true|false"&lt;br&gt;     elementMayBeNull="true|false"&lt;br&gt;     locid="descriptionID"&amp;gt;欄位說明文字&lt;br&gt; &amp;lt;/field&amp;gt;&lt;b&gt;&lt;br&gt; &lt;/b&gt;元素和函數參數相同不贅述。&lt;br&gt; &lt;h2&gt;   &lt;b&gt;AJAX, ASP.NET, Web Service 對 Javascript Intellisense 支援&lt;/b&gt; &lt;/h2&gt; &lt;h2&gt; &lt;/h2&gt; &lt;p&gt;   雖然 ASP.NET 也可直接印入 js 檔，但官方建議透過 ScriptManager 引用，引入之後即可獲得相同支援。如下：&lt;br&gt; &lt;/p&gt; &lt;div&gt;   &lt;table id="pfei" bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         &amp;lt;asp:ScriptManager ID="ScriptManager1" runat="server"&amp;gt;&lt;br&gt;           &amp;lt;Scripts&amp;gt;&lt;br&gt;             &amp;lt;asp:ScriptReference Path="~/MyLib.js" /&amp;gt;&lt;br&gt;             &amp;lt;asp:ScriptReference Path="~/jQuery.js" /&amp;gt;&lt;br&gt;           &amp;lt;/Scripts&amp;gt;&lt;br&gt;         &amp;lt;/asp:ScriptManager&amp;gt;&lt;br&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt; &lt;p&gt;   &lt;br&gt; &lt;/p&gt; &lt;p&gt;   如果想在引入 Web Services 中的 js，首先，在 Web Service 中必須加入   System.Web.Script.Services.ScriptService Attribute，如下： &lt;/p&gt; &lt;p&gt;     &lt;/p&gt; &lt;div&gt;   &lt;table id="kalb" bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         [System.Web.Script.Services.ScriptServie()]&lt;br&gt;         [WebService(Namespace="http://tempuri.org")]&lt;br&gt;         public class WebService: System.Web.Services.WebService{&lt;br&gt;           [WebMethod()]&lt;br&gt;           public String Hello(){&lt;br&gt;             return "Hello World";&lt;br&gt;           }&lt;br&gt;         }&lt;br&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt; &lt;p&gt;   &lt;br&gt; &lt;/p&gt; &lt;p&gt;   接著在 ASP.NET 的 ScriptManager 中加入 Services 即可獲得支援，如下： &lt;/p&gt; &lt;p&gt;   &lt;br&gt; &lt;/p&gt; &lt;div&gt;   &lt;table id="pfei" bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         &amp;lt;asp:ScriptManager ID="ScriptManager1" runat="server"&amp;gt;&lt;br&gt;           &amp;lt;Services&amp;gt;&lt;br&gt;             &amp;lt;asp:ScriptReference Path="~/MyLib.asmx"         /&amp;gt;   &lt;br&gt;           &amp;lt;/Services&amp;gt;&lt;br&gt;         &amp;lt;/asp:ScriptManager&amp;gt;&lt;br&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt; &lt;br&gt; &lt;p&gt;   在 AJAX 上，AJAX Client Behavior, AJAX Client Control 和 AJAX Client Library   使用上也支援 Javascript Intenllisense。&lt;br&gt; &lt;/p&gt; &lt;div id="p70o" style="padding: 1em 0pt; text-align: center;"&gt;   &lt;div id="piq:" style="padding: 1em 0pt;"&gt;     &lt;img src="http://docs.google.com/File?id=dcxw59mr_3395837tnhc" style="width: 684px; height: 421px;"&gt;&lt;br&gt;     &lt;div style="text-align: center;"&gt;       圖4、AJAX 的支援[1]&lt;br&gt;     &lt;/div&gt;   &lt;/div&gt; &lt;/div&gt; &lt;p&gt;     &lt;/p&gt; &lt;h2&gt;   Javascript 偵錯 &lt;/h2&gt; VS2008 要對 IE 進行偵錯，必須在 IE 上關閉"停用程式碼除錯"選項(VS2005 或 Visual Script Debugger 相同)。如未關閉可能出現如下提示訊息：&lt;br&gt; &lt;div id="r5zj" style="padding: 1em 0pt;"&gt;   &lt;div style="text-align: center;"&gt;     &lt;img src="http://docs.google.com/File?id=dcxw59mr_3387gbg429cz" style="width: 553px; height: 210px;"&gt;&lt;br&gt;   &lt;/div&gt;   &lt;div&gt;     &lt;div style="text-align: center;"&gt;       圖5、除錯關閉提示[1]&lt;br&gt;     &lt;/div&gt;     &lt;div style="text-align: left;"&gt;       &lt;br&gt;       關閉方式如下圖所示：&lt;br&gt;     &lt;/div&gt;   &lt;/div&gt;   &lt;div id="z1-f" style="padding: 1em 0pt; text-align: center;"&gt;     &lt;img src="http://docs.google.com/File?id=dcxw59mr_3388t3p2zfxk" style="width: 413px; height: 511px;"&gt;&lt;br&gt;     圖6、關閉除錯停用選項[1]&lt;br&gt;   &lt;/div&gt;   &lt;b&gt;語法錯誤提示&lt;/b&gt;&lt;br&gt; &lt;/div&gt; 當你透過 Visual Studio 編輯 Javascript 時，會即時檢查語法的正確性，如果你用 VS2005 編輯 C# 就會相當熟悉這個通能，他會在語法錯誤之處會標示提醒符號，如下圖：&lt;br&gt; &lt;div id="jaan" style="padding: 1em 0pt; text-align: center;"&gt;   &lt;img src="http://docs.google.com/File?id=dcxw59mr_3396zxhjz3gb" height="355" width="544"&gt; &lt;/div&gt; &lt;div style="text-align: center;"&gt;   圖7、語法檢查[1]&lt;br&gt; &lt;/div&gt; &lt;b&gt;中斷點&lt;/b&gt;&lt;br&gt; &lt;br&gt; 可在程式中設定中斷點，如同 C# 程式一般，像是條件式中斷、hit count 中斷等，也可在中斷時，透過 Call Stack, 區域視窗, 即時監看視窗, Visualizer 等檢查相關的參數狀態，如下圖：&lt;br&gt; &lt;div id="s5bh" style="padding: 1em 0pt;"&gt;   &lt;div style="text-align: center;"&gt;     &lt;img src="http://docs.google.com/File?id=dcxw59mr_3397dqx58rtr" height="387" width="548"&gt;&lt;br&gt;     圖8、中斷點[1]&lt;br&gt;   &lt;/div&gt;   &lt;div id="x2u8" style="padding: 1em 0pt;"&gt;     &lt;div style="text-align: center;"&gt;       &lt;img src="http://docs.google.com/File?id=dcxw59mr_3398g73335c2" style="width: 490px; height: 209px;"&gt;&lt;br&gt;       圖9、各種除錯視窗[1]&lt;br&gt;     &lt;/div&gt;     &lt;div id="b-k_" style="padding: 1em 0pt;"&gt;       &lt;div style="text-align: center;"&gt;         &lt;img src="http://docs.google.com/File?id=dcxw59mr_33998x9nfqcj" style="width: 398px; height: 221px;"&gt;&lt;br&gt;       &lt;/div&gt;       &lt;div style="text-align: center;"&gt;         圖10、Visualizer [1]&lt;br&gt;       &lt;/div&gt;       &lt;h2&gt;         偵測外部網頁       &lt;/h2&gt;           這個功能我覺得是這個主題中相當重要的一部分，這個主要用來偵錯已經在運作中的網頁 Javascript       功能，雖然 VS2005 也有類似的功能，但不像 VS2008 這麼強大，他可將指定的網址相關檔案下載下來，並在 VS       中呈現目前的內容，並且會依據實際情況變更。所以，如果你要研究某個網站的 Javascript 如何撰寫，只要透過這個方式將網頁資料透過 VS       偵測，並利用剛剛說的中斷點和其他除錯視窗，就是一個強大的 Hack 工具。唯一美中不足的是無法動態修改程式碼。希望未來能夠提供此功能。&lt;br&gt;       &lt;br&gt;           由於沒有 VS2008 可抓圖展示，就以投影片的內容整理如下：&lt;br&gt;       &lt;br&gt;       &lt;b&gt;啟動外部偵錯&lt;/b&gt;&lt;br&gt;       1. 使用 IE 瀏覽網頁&lt;br&gt;       2. 使用 Visual Studio 2008 將 IE 的行程 (iexplorer.exe) 附加到偵錯模式下&lt;br&gt;       &lt;div id="aftm" style="padding: 1em 0pt; text-align: center;"&gt;         &lt;img src="http://docs.google.com/File?id=dcxw59mr_3390fqgqc9c5" height="343" width="536"&gt;       &lt;/div&gt;       &lt;div style="text-align: center;"&gt;         圖11、VS 附加到指定 IE 行程 [1]       &lt;/div&gt;       3. VS 會下載相關檔案到 Script Document&lt;br&gt;       &lt;div id="xk5k" style="padding: 1em 0pt; text-align: center;"&gt;         &lt;img src="http://docs.google.com/File?id=dcxw59mr_3400ckhgshhh" height="277" width="201"&gt;&lt;br&gt;         圖12、Script document [1]&lt;br&gt;       &lt;/div&gt;       &lt;br&gt;       4. 開啓檔案&lt;br&gt;       4. 設定中斷點&lt;br&gt;       5. 進行偵錯&lt;br&gt;       &lt;div id="ryn1" style="padding: 1em 0pt; text-align: center;"&gt;         &lt;img src="http://docs.google.com/File?id=dcxw59mr_3401pz2b5rfm" style="width: 642px; height: 448px;"&gt;       &lt;/div&gt;       &lt;div style="text-align: center;"&gt;         圖12、Script document [1]       &lt;/div&gt;     &lt;/div&gt;   &lt;/div&gt; &lt;/div&gt; &lt;h2&gt;   常見問題 &lt;/h2&gt; &lt;b&gt;1. 是否支援物件的 Intellisense?&lt;/b&gt;&lt;br&gt; 是&lt;br&gt; &lt;br&gt; &lt;b&gt;2. 是否支援物件的程式碼註解格式？&lt;/b&gt;&lt;br&gt; 是&lt;br&gt; &lt;br&gt; &lt;b&gt;3. 是否支援 Reference To 到函數或物件的功能？&lt;/b&gt;&lt;br&gt; 否，尚未支援&lt;br&gt; &lt;br&gt; &lt;b&gt;4. VS2008 的 Javascript 註解格式是否可以產生文件？&lt;/b&gt;&lt;br&gt; 目前尚未支援&lt;br&gt; &lt;br&gt; &lt;b&gt;5. 是否可關閉 Intellisense 功能？&lt;/b&gt;&lt;br&gt; 否，沒有提供選項設定。&lt;br&gt; &lt;br&gt; &lt;b&gt;6. 可偵錯 Silverlight 嗎？&lt;/b&gt;&lt;br&gt; 是&lt;br&gt; &lt;br style="font-weight: bold;"&gt; &lt;b&gt;7. 現有的 javaDoc 註解格式是否支援 Intellisense 或提供轉換工具？&lt;/b&gt;&lt;br&gt; 否，可透過 Open Source 尋找看看&lt;br&gt; &lt;br&gt; &lt;b&gt;8. 可支援 Firefox 上的偵錯嗎？&lt;/b&gt;&lt;br&gt; 否&lt;br&gt; &lt;h2&gt;   參考資料 &lt;/h2&gt; [1] 曹祖聖, "&lt;a href="http://teacher.allok.com.tw/%AC%E3%B0Q%B7%7C%B8%EA%AE%C6/%B2%60%A4J%20Visual%20Studio%202008%20JavaScript%20%B0%BB%BF%F9%A7%DE%B3N.zip" id="gp6_" title="深入 Visual Studio 2008 Javascript 偵錯技術投影片"&gt;深入 Visual Studio 2008 Javascript 偵錯技術投影片&lt;/a&gt; "&lt;br&gt; &lt;p&gt;&lt;div:shape&gt;[2] "&lt;/div:shape&gt;&lt;a href="http://blogs.msdn.com/kaevans/archive/2007/08/10/javascript-debugging-in-visual-studio-2008.aspx" id="pa1x" title="Debug JavaScript in JSP or PHP Pages with Visual Studio 2008"&gt;Debug   JavaScript in JSP or PHP Pages with Visual Studio 2008&lt;/a&gt;"&lt;/p&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;&lt;div:shape&gt; &lt;/div:shape&gt;   &lt;div&gt;[3] "&lt;a title="VS 2008 JavaScript Debugging" href="http://weblogs.asp.net/scottgu/archive/2007/07/19/vs-2008-javascript-debugging.aspx" id="d8x9"&gt;VS 2008 JavaScript Debugging&lt;/a&gt;"   &lt;/div&gt;   &lt;div&gt;[4] "&lt;a title="Javascript Intellisense, Documentation, &amp;amp; Visual Studio 2008 (Orcas)" href="http://www.opensourceconnections.com/2007/09/01/javascript-intellisense-documentation-visual-studio-2008-orcas/" id="a223"&gt;Javascript Intellisense, Documentation, &amp;amp; Visual Studio 2008 (Orcas)&lt;/a&gt;" &lt;/div&gt; &lt;/div&gt;&lt;div:shape&gt; &lt;/div:shape&gt;  &lt;div:shape&gt; &lt;/div:shape&gt; &lt;div&gt;[5] "&lt;a title="JScript IntelliSense in Visual Studio Orcas" href="http://blogs.msdn.com/webdevtools/archive/2007/03/02/jscript-intellisense-in-orcas.aspx%20%20" id="o545"&gt;JScript IntelliSense in Visual Studio Orcas&lt;/a&gt;"&lt;br&gt;&lt;br&gt;&lt;/div&gt; &lt;br&gt; &lt;div id="ot_y" style="padding: 1em 0pt; text-align: left;"&gt;   &lt;br&gt; &lt;/div&gt; &lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-3925846046258461419?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/tPAXj/~4/4lsu1fElz54" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/3925846046258461419/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5113208746101413080&amp;postID=3925846046258461419" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/3925846046258461419?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/3925846046258461419?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/tPAXj/~3/4lsu1fElz54/vs2008-javascript-msn-space-google-doc_25.html" title="" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://chuiwenchiu-arick.blogspot.com/2007/10/vs2008-javascript-msn-space-google-doc_25.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcNQHo9fSp7ImA9WxJXEEU.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-5511979299643291657</id><published>2007-10-01T02:23:00.000-07:00</published><updated>2009-06-03T21:01:31.465-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-03T21:01:31.465-07:00</app:edited><title /><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pAzmBLTfHXfdUK75QHZ3__qVWCs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pAzmBLTfHXfdUK75QHZ3__qVWCs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pAzmBLTfHXfdUK75QHZ3__qVWCs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pAzmBLTfHXfdUK75QHZ3__qVWCs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h1 style="text-align: center;"&gt;   Vista 的 Session 0   &lt;font face="Arial, Helvetica, sans-serif"&gt;&lt;span lang="en-US"&gt;Isolation&lt;/span&gt;&lt;/font&gt;   問題 &lt;/h1&gt; &lt;a href="http://chuiwenchiu.spaces.live.com/" title="MSN Space"&gt;&lt;u&gt;&lt;font color="#800080"&gt;&lt;i&gt;MSN Space&lt;/i&gt;&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;i&gt;、&lt;/i&gt;&lt;a href="http://docs.google.com/Doc?id=dcxw59mr_3318fk57rg" title="Google Doc"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;&lt;i&gt;Google Doc&lt;/i&gt;&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;i&gt; 、&lt;/i&gt;&lt;a href="http://chuiwenchiu-arick.blogspot.com/" title="Google Blog"&gt;&lt;u&gt;&lt;font color="#800080"&gt;&lt;i&gt;Google Blog&lt;/i&gt;&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;br&gt; &lt;i&gt;Chui-Wen Chiu&lt;/i&gt;&lt;br style="font-style: italic;"&gt; &lt;i&gt;2007.10.01&lt;/i&gt;&lt;br&gt; &lt;br&gt; &lt;h2&gt;   前言 &lt;/h2&gt;     由於我目前還相當排斥 Vista 也無開發環境，所以當初開發時並沒有把 Vista 列入考慮。可是當這個產品漸漸成型，也受到眾多主管的關注，偏偏他們都已經在使用 Vista 作業系統，所以測試發現無法在 Vista 上運作，這針是讓我頭痛的問題。一來我要先借到一台安裝 Vista 的機器，二來在 XP 上熟悉的工具在 Vista 上很多都不相容，尤有甚者 Vista 就直接重開機，最慘的是 Alcohol 120%  1.9.5.3105 在 Vista 上安裝重開機會沒有辦法進入作業系統，真是讓人傻眼，還好系統還原後就正常。總之，最後安裝了最基本的開發工具和除錯套件，由於發生問題的是印表機驅動程式，也就是 Print Processor 部份，這個的用途是當應用程式執行列印命令時，系統的 Print Spooler 服務會依據你選擇的印表機，載入對應的 Driver DLL，並依序喚起 OpenPrintProcessor, PrintDocumentOnPrintProcessor, ClosePrintProcessor 完成列印的工作，我的測試發現 OpenPrintProcessor 在 Vista 上就結束了，所以沒有辦法完成列印。&lt;br&gt; &lt;br&gt;     因為我的程式在列印過程會將資料導入一個 Window，在 OpenPrintProcessor 檢查該 Window Handle 是否存在，居然在 Vista 上的 FindWindow 抓不到該 Window，查了許多的資料後才知道，Vista 基於安全的理由，進行了 Session 0 Isolation，導致程式沒有辦法 FindWindow 和 SendMessage。&lt;br&gt; &lt;h2&gt;   何謂 Session 0 Isolation?&lt;br&gt; &lt;/h2&gt;     在 Windows 2000/XP/2003 和更早期的 Windows 作業系統，所有 Service 都運作在第一個登入用戶的 Session。此 Session 稱為「Session 0」。一般的應用程式也運作在同一個 Session 如圖1 所示。如此程式可透過 Windows API 如: FindWindow, SendMessage 與視窗應用程式互動。&lt;br&gt; &lt;div id="bj9f" style="padding: 1em 0pt; text-align: left;"&gt;   &lt;img src="http://docs.google.com/File?id=dcxw59mr_3320dtxkgpfq" style="width: 240px; height: 237px;"&gt; &lt;/div&gt; 圖1、2000/XP/2003 上的 Session(摘自[7])&lt;br&gt; &lt;br&gt; &lt;br&gt;     可是到了 Vista，基於「Session 0」中同時運作 Service 和視窗應用程式會產生安全風險，因為這些服務以提升的權限運行，因此會成為那些正在伺機提升自身權限級別的惡意代理的目標。因此 Vista 中透過 Session 0 Isolation 使 Service 和視窗應用程式進行隔離，使得 Service 和視窗應用程式沒有辦法透過視窗訊息進行互動，如圖2 所示。&lt;br&gt; &lt;div id="mvm:" style="padding: 1em 0pt; text-align: left;"&gt;   &lt;img src="http://docs.google.com/File?id=dcxw59mr_3319cncv3wf2" style="width: 720px; height: 290px;"&gt;&lt;br&gt;   圖2、Vista 上的 Session(摘自[7])&lt;br&gt; &lt;/div&gt; &lt;br&gt;     在 Windows Vista 中，只有 System Process 和 Service在「Session 0」運作。第一個使用者登入將到 Session 1，隨後的使用者將登入到後續的 Session (如：Session 2, Session 3, ...)。這表示著 Service 永遠不會與應用程式在相同的 Session 中進行溝通，因此可防止應用程式的攻擊。但是這樣的改變會造成透過 Service 運作的動程式受到影響，如：印表機驅動程式(使用 "Print Spooler" Service)。所以，簡單的說 Session 0 Isolation 機制，讓 Service 和應用程式分屬不同的 Session，避免 Service 遭受應用程式攻擊。&lt;br&gt; &lt;br&gt;     由於 Vista 上述 Session 機制改變，導致我的程式移植到 Vista 上無法正常運作。因為無法使用 SendMessage/PostMessage/PeekMessage 或其他視窗相關的 Windows API。所以，只能透過其他方式來繞過這個限制。官方建議的修改方式是改用 RPC 或命名的 Pipe 與視窗應用程式溝通。&lt;br&gt; &lt;h2&gt;   可能解決方式 &lt;/h2&gt;     針對我的問題，因為我的需求很單純，只是透過 SendMessage 通知 Window 資料寫入完成。於是我將 FindWindow 和 SendMessage 用 Pipe 方式改寫，也就是在 Window 端建立一個接收訊息的 Pipe，Driver 端則在必要的時候透過 Pipe 傳送命令過來，如此可規避 Session 0 Isolation 對其他 Session 應用持事互動的遮蔽。&lt;br&gt; &lt;h2&gt;   總結 &lt;/h2&gt;     雖然透過 Pipe 方式可以暫時解決問題，不過 Vista 上的 UAC 會使程式作受到些許限制，初期開發我是先關閉 UAC 解決這個問題，未來可能要再考慮 UAC 的情況。真希望 Jeffrey Richter 趕快出一本關於 Vista 底層運作的書，也許我對 Vista 上的開發會得心應手些~ &lt;h2&gt;   參考資料 &lt;/h2&gt; [1] &lt;a id="huir" title="在 Windows Vista 中，嘗試傳送訊息至工作階段 0 的程式可能會停止回應"&gt;在 Windows Vista 中，嘗試傳送訊息至工作階段 0 的程式可能會停止回應&lt;/a&gt;&lt;br&gt; [2] &lt;a href="http://www.microsoft.com/taiwan/whdc/system/vista/services.mspx" id="llg2" title="Impact of Session 0 Isolation on Services and Drivers in Windows Vista"&gt;Impact of Session 0 Isolation on Services and Drivers in Windows Vista&lt;/a&gt;&lt;br&gt; [3] &lt;a href="http://www.microsoft.com/china/MSDN/library/Windev/WindowsVista/AppComp.mspx#ESMAC" id="a1uh" title="Windows Vista Developer Story：应用程序兼容性集锦"&gt;Windows Vista Developer Story：应用程序兼容性集锦&lt;/a&gt;&lt;br&gt; [4] &lt;a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;327618&amp;amp;" id="w62m" title="Security, services and the interactive desktop in Windows"&gt;Security, services and the interactive desktop in Windows&lt;/a&gt;&lt;br&gt; [5] &lt;a href="http://blogs.msdn.com/larryosterman/archive/2005/09/14/466175.aspx" id="phx9" title="Interacting with Services"&gt;Interacting with Services&lt;/a&gt;&lt;br&gt; [6] &lt;a class="l" href="http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/Vista_Services.doc"&gt;Services in Windows Vista&lt;/a&gt;&lt;br&gt; [7] &lt;a href="http://blogs.technet.com/askperf/archive/2007/04/27/application-compatibility-session-0-isolation.aspx" id="tibt" title="Application Compatibility - Session 0 Isolation"&gt;Application Compatibility - Session 0 Isolation&lt;/a&gt;&lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt; &lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-5511979299643291657?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/tPAXj/~4/wmO36bUI4Hk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/5511979299643291657/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5113208746101413080&amp;postID=5511979299643291657" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/5511979299643291657?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/5511979299643291657?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/tPAXj/~3/wmO36bUI4Hk/vista-session-0-isolation-msn-space.html" title="" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://chuiwenchiu-arick.blogspot.com/2007/10/vista-session-0-isolation-msn-space.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcNQHo9cCp7ImA9WxJXEEU.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-7655880101093466845</id><published>2007-08-21T19:41:00.000-07:00</published><updated>2009-06-03T21:01:31.468-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-03T21:01:31.468-07:00</app:edited><title /><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YyJGnZUGmijRSGtDNtzvERO0AxU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YyJGnZUGmijRSGtDNtzvERO0AxU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YyJGnZUGmijRSGtDNtzvERO0AxU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YyJGnZUGmijRSGtDNtzvERO0AxU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="TEXT-ALIGN:center"&gt;   &lt;font size="4"&gt;&lt;span style="FONT-WEIGHT:bold"&gt;HttpWebRequest 錯誤訊息 "The server   committed a protocol violation..." 的解法&lt;/span&gt;&lt;/font&gt;&lt;br/&gt; &lt;/div&gt; &lt;a href="http://chuiwenchiu.spaces.live.com/" title="MSN Space"&gt;&lt;u&gt;&lt;font color="#800080"&gt;MSN Space&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;、&lt;a href="http://docs.google.com/Doc?id=dcxw59mr_1730c7nv99" title="Google Doc"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;Google Doc&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; 、&lt;a href="http://chuiwenchiu-arick.blogspot.com/" title="Google Blog"&gt;&lt;u&gt;&lt;font color="#800080"&gt;Google Blog&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;br/&gt; Chui-Wen Chiu&lt;br/&gt; 2007.08.22&lt;br/&gt; &lt;br/&gt; 今天收到一個錯誤訊息"The server committed a protocol violation. Section=ResponseHeader Detail=CR must be followed by LF"， Google 一下有相當多這方面的資料。我就不一一細列，這個錯誤主要是因為 Web Server 回傳的 HTTP 訊息結尾只有 n，而 .NET 實作的 WebRequest 預設情況下，必須符合 RFC 855 實作，也就是結尾必須包含 rn。所以，當 .NET 的 WebRequest 收到這個 HTTP 訊息時，就會出現錯誤。&lt;br/&gt; &lt;br/&gt; 解法兩個，一個就是讓 Web Server 丟出的 HTTP 訊息符合 RFC 855，另一個就是是讓 WebRequest 睜一隻眼閉一隻眼，亦即將 WebRequest 的 UseUnsafeHeaderParsing 屬性設為 true，這個屬性在 MSDN 文件上得描述如下：&lt;br/&gt; &lt;br/&gt; &lt;p style="FONT-STYLE:italic"&gt;   當這個屬性設定為 &lt;b&gt;false&lt;/b&gt; 時，會在 HTTP 剖析期間執行下列驗證： &lt;/p&gt; &lt;ul style="FONT-STYLE:italic"&gt;   &lt;li&gt;     &lt;p&gt;       在行結尾程式碼中使用 CRLF；不允許單獨使用 CR 或 LF。     &lt;/p&gt;   &lt;/li&gt;   &lt;li&gt;     &lt;p&gt;       標頭名稱中不應該有空格。     &lt;/p&gt;   &lt;/li&gt;   &lt;li&gt;     &lt;p&gt;       如果有多個狀態列，會將所有額外狀態列視為不正確的標頭名稱/值組。     &lt;/p&gt;   &lt;/li&gt;   &lt;li&gt;     &lt;p&gt;       除了狀態碼外，狀態列還必須有狀態描述。     &lt;/p&gt;   &lt;/li&gt;   &lt;li&gt;     &lt;p&gt;       標頭名稱中不能有非 ASCII 字元。無論這個屬性設定為 &lt;b&gt;true&lt;/b&gt; 或 &lt;b&gt;false&lt;/b&gt;，都會執行這個驗證。     &lt;/p&gt;   &lt;/li&gt; &lt;/ul&gt; &lt;p style="FONT-STYLE:italic"&gt;   當發生通訊協定違規時，會擲回 &lt;a href="T_System_Net_WebException.htm"&gt;WebException&lt;/a&gt;   例外狀況，並將狀態設定為 ServerProtocolViolation。如果 &lt;b&gt;UseUnsafeHeaderParsing&lt;/b&gt; 屬性設定為   &lt;b&gt;true&lt;/b&gt;，則會忽略驗證錯誤。 &lt;/p&gt; &lt;p style="FONT-STYLE:italic"&gt;   將這個屬性設定為 &lt;b&gt;true&lt;/b&gt; 具有安全性含義，因此只有在需要與伺服器的回溯相容性 (Backward Compatibility)   時，才應該執行此動作。 &lt;/p&gt; &lt;br/&gt; 需要注意的是這個屬性到 .NET 2.0 才新增的，且文件中也提到除非為了 Web Server 回溯相容，否則還是設定為 false。另外，如果要全面套用到每一個使用到 WebRequest 的地方，在 app.config 加上下面的設定：&lt;br/&gt; &lt;br/&gt; &amp;lt;system.net&amp;gt;&lt;br/&gt;     &amp;lt;settings&amp;gt;&lt;br/&gt;         &lt;span style="BACKGROUND-COLOR:#ffff99"&gt;&amp;lt;httpWebRequest useUnsafeHeaderParsing="true" /&amp;gt; &lt;/span&gt;&lt;br/&gt;     &amp;lt;/settings&amp;gt;&lt;br/&gt; &amp;lt;/system.net&amp;gt;&lt;br/&gt; &lt;br/&gt; &lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-7655880101093466845?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/tPAXj/~4/qtboztSTN-c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/7655880101093466845/comments/default" title="張貼意見" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5113208746101413080&amp;postID=7655880101093466845" title="0 個意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/7655880101093466845?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/7655880101093466845?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/tPAXj/~3/qtboztSTN-c/httpwebrequest-server-committed.html" title="" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://chuiwenchiu-arick.blogspot.com/2007/08/httpwebrequest-server-committed.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cCQn0zeip7ImA9WB5UFUU.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-303844062707490987</id><published>2007-08-19T20:37:00.000-07:00</published><updated>2007-08-19T20:37:43.382-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-19T20:37:43.382-07:00</app:edited><title /><content type="html">&lt;div style="text-align: center;"&gt;   &lt;font size="4"&gt;&lt;span style="font-weight: bold;"&gt;(C#) 取得最新的 Twitter 訊息&lt;/span&gt;&lt;/font&gt;&lt;br&gt; &lt;/div&gt; &lt;a href="http://chuiwenchiu.spaces.live.com/" title="MSN Space"&gt;&lt;u&gt;&lt;font color="#800080"&gt;MSN Space&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;、&lt;a href="http://docs.google.com/Doc?id=dcxw59mr_1727hp2gf6" title="Google Doc"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;Google Doc&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; 、&lt;a href="http://chuiwenchiu-arick.blogspot.com/" title="Google Blog"&gt;&lt;u&gt;&lt;font color="#800080"&gt;Google Blog&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;br&gt; Chui-Wen Chiu&lt;br&gt; 2007.08.20&lt;br&gt; &lt;br&gt; &lt;span style="font-weight: bold;"&gt;測試環境&lt;/span&gt;&lt;br&gt; 1. Windows XP Pro&lt;br&gt; 2. Visual Studio 2005&lt;br&gt; &lt;br&gt; TWessenger[1] 是一套抓取 twitter 最新訊息來更新 MSN 狀態的 Messenger Add-In，主要技術只有兩個，第一個是透過 Windows Live Messenger Add-In API 更新 MSN 狀態文字，第二個是抓取 ATOM 取得最新訊息。本文主要描述抓取最新 Twitter 訊息的方式，首先要取得一個 twitter id，然後可代換成 ATOM URL 如：http://twitter.com/statuses/user_timeline/&lt;font color="#ff0000"&gt;1713501&lt;/font&gt;.atom，其中 1713501 是我個人的 twitter ID，你可以代換成任何 ID。*.atom 的內容類似如下：&lt;br&gt; &lt;div&gt;   &lt;table id="m-1f" bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         &amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br&gt;         &amp;lt;feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom"&amp;gt;&lt;br&gt;           &amp;lt;title&amp;gt;Twitter / Chui-Wen Chiu&amp;lt;/title&amp;gt;&lt;br&gt;           &amp;lt;id&amp;gt;tag:twitter.com:Statuses&amp;lt;/id&amp;gt;&lt;br&gt;           &amp;lt;link type="text/html" href="http://twitter.com/chui_wen_chiu" rel="alternate"/&amp;gt;&lt;br&gt;           &amp;lt;subtitle&amp;gt;Twitter updates from Chui-Wen Chiu.&amp;lt;/subtitle&amp;gt;&lt;br&gt;           &amp;lt;entry&amp;gt;&lt;br&gt;             &amp;lt;title&amp;gt;Chui-Wen Chiu: ebXML&amp;amp;#26159;&amp;amp;#19968;&amp;amp;#20491;&amp;amp;#38283;&amp;amp;#25918;&amp;amp;#24615;&amp;amp;#30340;&amp;amp;#38651;&amp;amp;#23376;&amp;amp;#21830;&amp;amp;#21209;&amp;amp;#24314;&amp;amp;#27083;&amp;amp;#27161;&amp;amp;#28310; (http://www.ebxml.org.tw/big5/index.jsp)&amp;lt;/title&amp;gt;&lt;br&gt;             &lt;span style="background-color: rgb(255, 255, 153);"&gt;&amp;lt;&lt;font style="font-weight: bold;" color="#ff0000"&gt;content &lt;/font&gt;type="html"&amp;gt;Chui-Wen Chiu: ebXML&amp;amp;#26159;&amp;amp;#19968;&amp;amp;#20491;&amp;amp;#38283;&amp;amp;#25918;&amp;amp;#24615;&amp;amp;#30340;&amp;amp;#38651;&amp;amp;#23376;&amp;amp;#21830;&amp;amp;#21209;&amp;amp;#24314;&amp;amp;#27083;&amp;amp;#27161;&amp;amp;#28310; (http://www.ebxml.org.tw/big5/index.jsp)&amp;lt;/content&amp;gt;&lt;/span&gt;&lt;br&gt;             &amp;lt;id&amp;gt;tag:twitter.com,2007-08-19T17:51:32+00:00:http://twitter.com/chui_wen_chiu/statuses/214515122&amp;lt;/id&amp;gt;&lt;br&gt;             &amp;lt;published&amp;gt;2007-08-19T17:51:32+00:00&amp;lt;/published&amp;gt;&lt;br&gt;             &amp;lt;updated&amp;gt;2007-08-19T17:51:32+00:00&amp;lt;/updated&amp;gt;&lt;br&gt;             &amp;lt;link type="text/html" href="http://twitter.com/chui_wen_chiu/statuses/214515122" rel="alternate"/&amp;gt;&lt;br&gt;           &amp;lt;/entry&amp;gt;&lt;br&gt;           &amp;lt;entry&amp;gt;&lt;br&gt;             &amp;lt;title&amp;gt;Chui-Wen Chiu: &amp;amp;#21152;&amp;amp;#24555;OpenOffice&amp;amp;#22519;&amp;amp;#34892;&amp;amp;#36895;&amp;amp;#24230;&amp;amp;#30340;&amp;amp;#26041;&amp;amp;#27861; (http://blog.xuite.net/emisjerry/tech/13078174)&amp;lt;/title&amp;gt;&lt;br&gt;             &amp;lt;content type="html"&amp;gt;Chui-Wen Chiu: &amp;amp;#21152;&amp;amp;#24555;OpenOffice&amp;amp;#22519;&amp;amp;#34892;&amp;amp;#36895;&amp;amp;#24230;&amp;amp;#30340;&amp;amp;#26041;&amp;amp;#27861; (http://blog.xuite.net/emisjerry/tech/13078174)&amp;lt;/content&amp;gt;&lt;br&gt;             &amp;lt;id&amp;gt;tag:twitter.com,2007-08-19T17:35:47+00:00:http://twitter.com/chui_wen_chiu/statuses/214495672&amp;lt;/id&amp;gt;&lt;br&gt;             &amp;lt;published&amp;gt;2007-08-19T17:35:47+00:00&amp;lt;/published&amp;gt;&lt;br&gt;             &amp;lt;updated&amp;gt;2007-08-19T17:35:47+00:00&amp;lt;/updated&amp;gt;&lt;br&gt;             &amp;lt;link type="text/html" href="http://twitter.com/chui_wen_chiu/statuses/214495672" rel="alternate"/&amp;gt;&lt;br&gt;           &amp;lt;/entry&amp;gt;&lt;br&gt;         ...略&lt;br&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt; &lt;br&gt; &lt;br&gt; 接著透過 .NET 的 XmlTextReader 以 SAX 方式循序讀取 ATOM，直到搜尋 &amp;lt;content&amp;gt; 標籤，其標籤內容即為 twitter 內容，因為 ATOM 是從新到就排序，所以第一筆極為最新消息，因此，整個完成的程序如下：&lt;br&gt; &lt;br&gt; &lt;div&gt;   &lt;table id="m-1f" bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         using System;&lt;br&gt;         using System.Xml;&lt;br&gt;         &lt;br&gt;         namespace ConsoleApplication1 {&lt;br&gt;             class Program {&lt;br&gt;                 static void Main(string[] args) {&lt;br&gt;                     &lt;font color="#009900"&gt;// Twitter ATOM URL&lt;/font&gt;&lt;br&gt;                     string url = "http://twitter.com/statuses/user_timeline/&lt;span style="background-color: rgb(255, 255, 153);"&gt;1713501&lt;/span&gt;.atom";&lt;br&gt;                     String statusMsg = String.Empty;&lt;br&gt;                     String username = String.Empty;&lt;br&gt;                     using (XmlTextReader xmlReader = new XmlTextReader(url)) {&lt;br&gt;                         while (&lt;font color="#ff0000"&gt;xmlReader.Read())&lt;/font&gt; {                   &lt;br&gt;                             if (&lt;font color="#ff0000"&gt;xmlReader.Name == "content"&lt;/font&gt;) {&lt;br&gt;                                 &lt;font color="#009900"&gt;// 取得 twitter 內容&lt;/font&gt;&lt;br&gt;                                 &lt;font color="#ff0000"&gt;String tmp = xmlReader.ReadString();&lt;/font&gt;&lt;br&gt;         &lt;br&gt;                                 &lt;font color="#009900"&gt;// 內容切割&lt;/font&gt;&lt;br&gt;                                 &lt;font style="font-weight: bold;" color="#ff0000"&gt;String[] contents = tmp.Split(new char[] { ':' }, 2);&lt;/font&gt;&lt;br&gt;                                 username = contents[0];&lt;br&gt;                                 statusMsg = contents[1].Trim();                      &lt;br&gt;         &lt;br&gt;                                 break;&lt;br&gt;                             }&lt;br&gt;                         }&lt;br&gt;                     }&lt;br&gt;                     Console.WriteLine("Username: {0}", username);&lt;br&gt;                     Console.WriteLine("Message: {0}", statusMsg); &lt;br&gt;                 }&lt;br&gt;             }&lt;br&gt;         }&lt;br&gt;         &lt;br&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt; &lt;br&gt; &lt;span style="font-weight: bold;"&gt;執行結果&lt;/span&gt;&lt;br&gt; &lt;div id="img_25572113633294846" style="padding: 1em 0pt; text-align: left;"&gt;   &lt;img src="http://docs.google.com/File?id=dcxw59mr_1728dkgnrk5v" style="width: 667px; height: 84px;"&gt; &lt;/div&gt; &lt;br&gt; &lt;span style="font-weight: bold;"&gt;參考資料&lt;/span&gt;&lt;br&gt; [1] &lt;a href="http://kunal.kundaje.net/twessenger/" id="tpyk" title="TWessenger"&gt;TWessenger&lt;/a&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-303844062707490987?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/303844062707490987/comments/default" title="張貼意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/303844062707490987?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/303844062707490987?v=2" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D0MGSHg4eyp7ImA9WB5UEk0.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-3562024382606841031</id><published>2007-08-15T12:04:00.000-07:00</published><updated>2007-08-15T12:17:09.633-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-15T12:17:09.633-07:00</app:edited><title /><content type="html">&lt;div style="TEXT-ALIGN:center"&gt;   &lt;font size="4"&gt;&lt;span style="FONT-WEIGHT:bold"&gt;(Javascript) Lazy Function   Definition&lt;/span&gt;&lt;/font&gt;&lt;br/&gt; &lt;/div&gt; &lt;a href="http://chuiwenchiu.spaces.live.com/" title="MSN Space"&gt;&lt;u&gt;&lt;font color="#800080"&gt;MSN Space&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;、&lt;a href="http://docs.google.com/Doc?id=dcxw59mr_1699cw7494" title="Google Doc"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;Google Doc&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; 、&lt;a href="http://chuiwenchiu-arick.blogspot.com/" title="Google Blog"&gt;&lt;u&gt;&lt;font color="#800080"&gt;Google Blog&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;br/&gt; Chui-Wen Chiu&lt;br/&gt; 2007.08.16&lt;br/&gt; &lt;br/&gt; &lt;div class="body"&gt;   &lt;p&gt;     Peter[1] 提出一種用於函數式編程的設計模式稱為"Lazy Function Definition"。首天他提出一個問題：   &lt;/p&gt;   &lt;br/&gt;   &lt;p&gt;     &lt;span style="FONT-STYLE:italic"&gt; "撰寫一個 foo 函數，並回傳第一次呼叫 foo 的時間。"&lt;/span&gt;   &lt;/p&gt;   &lt;p&gt;     &lt;br/&gt;     &lt;span style="FONT-STYLE:italic"&gt;&lt;/span&gt;   &lt;/p&gt;   &lt;p&gt;     針對這個問題，他提出下面四種不同的解法：&lt;span style="FONT-STYLE:italic"&gt;&lt;br/&gt;     &lt;/span&gt;   &lt;/p&gt;   &lt;h3&gt;     &lt;font size="2"&gt; 解法#1: 傳統解法-全域變數&lt;/font&gt;   &lt;/h3&gt;   &lt;pre&gt;&lt;code&gt;var t; &lt;font color="#009900"&gt;// 紀錄第一次呼叫 foo 的時間&lt;/font&gt;&lt;br/&gt;function foo() {&lt;br/&gt;    if (t) { &lt;font color="#009900"&gt;// 假如已經有存放時間，則直接回傳&lt;/font&gt;&lt;br/&gt;        return t;&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    t = new Date(); &lt;font color="#009900"&gt;// 紀錄第一次呼叫時間&lt;/font&gt;&lt;br/&gt;    return t;&lt;br/&gt;}&lt;/code&gt;&lt;/pre&gt;   &lt;p&gt;     上述解法有兩個問題：   &lt;/p&gt;   &lt;p&gt;     1. 需要一個額外的全域變數 t，該變數有可能在呼叫 foo 時被修改   &lt;/p&gt;   &lt;p&gt;     2. 程式碼在執行階段無法達到最佳效率。因為每次呼叫都需要進行條件評估。雖然上述範例的條件式損耗很廉價，但是真實情況的條件式可能是多層次的     if-else-else-... 結構。   &lt;/p&gt;   &lt;h3&gt;     &lt;font size="2"&gt; 解法 #2: Module Pattern&lt;/font&gt;   &lt;/h3&gt;   &lt;p&gt;     利用     &lt;a href="http://www.jibbering.com/faq/faq_notes/closures.html#clEncap"&gt;Cornford&lt;/a&gt;     and &lt;a href="http://www.crockford.com/javascript/private.html"&gt;Crockford&lt;/a&gt;     所提出的 &lt;a href="http://yuiblog.com/blog/2007/06/12/module-pattern/"&gt;Module     Pattern&lt;/a&gt;[2] 可以解決解法#1 的第一個問題，透過 closure 技法將全域變數封裝成只有 foo 內的程式可存取，如下：   &lt;/p&gt;   &lt;pre&gt;&lt;code&gt;var foo = (function() {&lt;br/&gt;    var &lt;font color="#cc0000" style="FONT-WEIGHT:bold"&gt;t&lt;/font&gt;; &lt;font color="#006600"&gt;// 封裝在 foo 內的變數&lt;/font&gt;&lt;br/&gt;    return &lt;span style="BACKGROUND-COLOR:#ffff99"&gt;function() {&lt;/span&gt;&lt;br/&gt;        if (&lt;font color="#cc0000" style="FONT-WEIGHT:bold"&gt;t&lt;/font&gt;) {&lt;/code&gt;&lt;code&gt;&lt;font&gt;&lt;font color="#009900"&gt;// 假如已經有存放時間，則直接回傳&lt;/font&gt;&lt;/font&gt;&lt;/code&gt;&lt;code&gt;            &lt;br/&gt;	    return &lt;font color="#cc0000"&gt;&lt;span style="FONT-WEIGHT:bold"&gt;t&lt;/span&gt;&lt;/font&gt;;&lt;br/&gt;        }&lt;br/&gt;        &lt;font color="#cc0000"&gt;&lt;span style="FONT-WEIGHT:bold"&gt;t&lt;/span&gt;&lt;/font&gt; = new Date();&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;code&gt;&lt;font color="#009900"&gt;// 紀錄第一次呼叫時間&lt;/font&gt;&lt;/code&gt;&lt;code&gt;        &lt;br/&gt;	return &lt;font color="#cc0000"&gt;&lt;span style="FONT-WEIGHT:bold"&gt;t&lt;/span&gt;&lt;/font&gt;;&lt;br/&gt;   &lt;span style="BACKGROUND-COLOR:#ffff99"&gt; }&lt;/span&gt;&lt;br/&gt;})();&lt;/code&gt;&lt;/pre&gt;   &lt;p&gt;     這種解法仍有解法#1的第2個問題存在，仍需重複進行條件式評估。   &lt;/p&gt;   &lt;br/&gt;   &lt;h3&gt;     &lt;font size="2"&gt; 解法 #3: 函數即物件-使用物件屬性保存狀態&lt;/font&gt;   &lt;/h3&gt;   &lt;pre&gt;&lt;code&gt;function foo() {&lt;br/&gt;    if (foo&lt;font color="#ff0000"&gt;.t&lt;/font&gt;) {&lt;/code&gt;&lt;code&gt; &lt;font color="#009900"&gt;// 假如已經有存放時間，則直接回傳&lt;/font&gt;&lt;/code&gt;&lt;code&gt;&lt;br/&gt; 	return foo.t;&lt;br/&gt;    }&lt;br/&gt;    foo.t = new Date();&lt;/code&gt;&lt;code&gt;&lt;font color="#009900"&gt;// 紀錄第一次呼叫時間&lt;/font&gt;&lt;/code&gt;&lt;code&gt;    &lt;br/&gt;    return foo.t;&lt;br/&gt;}&lt;/code&gt;&lt;/pre&gt;   &lt;p&gt;     這個解法比 Module Pattern 更為簡潔，直接透過物件屬性存放資料，而不需要在產生一個額外的 Function     Object。所以也能避免全域變數的問題。但這種解法仍有解法#1的第2個問題存在，仍需重複進行條件式評估。   &lt;/p&gt;   &lt;h3&gt;     &lt;font size="2"&gt; 解法 #4: Lazy Function Definition&lt;/font&gt;   &lt;/h3&gt;   &lt;pre&gt;&lt;code&gt;var foo = function() {&lt;br/&gt;    var t = new Date();&lt;br/&gt;    &lt;font color="#ff0000"&gt;&lt;span style="FONT-WEIGHT:bold"&gt;foo &lt;/span&gt;&lt;/font&gt;= function() { &lt;font color="#006600"&gt;// 改寫原先的函數定義&lt;/font&gt;&lt;br/&gt;        return t; &lt;font color="#006600"&gt;// Closure t&lt;/font&gt;&lt;br/&gt;    };&lt;br/&gt;    return &lt;font color="#ff0000" style="FONT-WEIGHT:bold"&gt;foo()&lt;/font&gt;; &lt;font color="#006600"&gt;// 套用新的 foo 函數回傳值&lt;/font&gt;&lt;br/&gt;};&lt;/code&gt;&lt;/pre&gt;   &lt;p&gt;     當 foo 第一次被呼叫時，會先實體化一個 &lt;code&gt;Date&lt;/code&gt; 物件並重新指定將 Date 物件 Closure 的 foo     函數，透過重新的指定可以改寫原來的函數定義，因為 Date 物件已經被 Closure，所以會一直存在。透過此一解法可以避免解法#1的兩個問題。   &lt;/p&gt;   &lt;br/&gt;   &lt;p&gt;     因此上述原來的 foo 函數定義可以想像成初始化內部 foo。簡單的說，第一次呼叫 foo 的函數定義如上程式，但之後的程式碼定義則是如下：&lt;br/&gt;     &lt;font color="#ff0000"&gt;&lt;span style="FONT-WEIGHT:bold"&gt;&lt;/span&gt;&lt;/font&gt;function     foo() {&lt;br/&gt;         return t; &lt;font color="#006600"&gt;// Closure t&lt;br/&gt;     &lt;/font&gt;&lt;code&gt;};&lt;/code&gt;&lt;br/&gt;   &lt;/p&gt;   &lt;p&gt;     &lt;br/&gt;   &lt;/p&gt;   &lt;p&gt;     上述可透過下面的程式碼進行測試：   &lt;/p&gt;   var foo = function() {   &lt;br/&gt;       var t = new Date();&lt;br/&gt;         &lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;alert(1);&lt;/span&gt;&lt;br/&gt;       foo = function() {&lt;br/&gt;           return t;&lt;br/&gt;       };&lt;br/&gt;       &lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;alert(2)&lt;/span&gt;&lt;br/&gt;       return foo();&lt;br/&gt;   };&lt;br/&gt;   alert( foo() ); // 出現 1, 2, 日期&lt;br/&gt;   alert( foo() ); // 出現 日期   &lt;p&gt;   &lt;/p&gt;   &lt;br/&gt;   &lt;h2&gt;     &lt;font size="2"&gt;應用：判斷不同瀏覽器的頁面捲動&lt;/font&gt;   &lt;/h2&gt;   var &lt;span style="BACKGROUND-COLOR:#ffff99"&gt;getScrollY &lt;/span&gt;= function() {&lt;br/&gt;   &lt;pre&gt;&lt;code&gt;&lt;br/&gt;    if (typeof window.pageYOffset == 'number') {&lt;br/&gt;&lt;br/&gt;        &lt;span style="BACKGROUND-COLOR:#ffff99"&gt;getScrollY = function() {&lt;/span&gt;&lt;br/&gt;            return window.pageYOffset;&lt;br/&gt;        };&lt;br/&gt;&lt;br/&gt;    } else if ((typeof document.compatMode == 'string') &amp;amp;&amp;amp;&lt;br/&gt;               (document.compatMode.indexOf('CSS') &amp;gt;= 0) &amp;amp;&amp;amp;&lt;br/&gt;               (document.documentElement) &amp;amp;&amp;amp;&lt;br/&gt;               (typeof document.documentElement.scrollTop == 'number')) {&lt;br/&gt;&lt;br/&gt;        &lt;span style="BACKGROUND-COLOR:#ffff99"&gt;getScrollY = function() {&lt;/span&gt;&lt;br/&gt;            return document.documentElement.scrollTop;&lt;br/&gt;        };&lt;br/&gt;&lt;br/&gt;    } else if ((document.body) &amp;amp;&amp;amp;&lt;br/&gt;               (typeof document.body.scrollTop == 'number')) {&lt;br/&gt;&lt;br/&gt;      &lt;span style="BACKGROUND-COLOR:#ffff99"&gt;getScrollY = function() {&lt;/span&gt;&lt;br/&gt;          return document.body.scrollTop;&lt;br/&gt;      }&lt;br/&gt;&lt;br/&gt;    } else {&lt;br/&gt;&lt;br/&gt;      &lt;span style="BACKGROUND-COLOR:#ffff99"&gt;getScrollY = function() {&lt;/span&gt;&lt;br/&gt;          return NaN;&lt;br/&gt;      };&lt;br/&gt;&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    return &lt;span style="BACKGROUND-COLOR:#ffff99"&gt;getScrollY();&lt;/span&gt;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;透過 "Lazy Function Definition" 只需要在第一次花費條件式評估，對於重複呼叫的函數特別能夠改善效率。&lt;/code&gt;&lt;/pre&gt;   &lt;span style="FONT-WEIGHT:bold"&gt;補充&lt;/span&gt;&lt;br/&gt;   &lt;p&gt;     &lt;strong&gt;&lt;/strong&gt;Firefox/Safari/Opera 的     &lt;a href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Creating_New_Objects:Defining_Getters_and_Setters"&gt;getter     methods&lt;/a&gt;[3] 能夠在屬性上模擬 "lazy definition" 如下：   &lt;/p&gt;   &lt;pre&gt;&lt;code&gt;&lt;span style="BACKGROUND-COLOR:#ffff99"&gt;this.__defineGetter__("foo", function() {&lt;/span&gt;&lt;br/&gt;  var t = new Date();&lt;br/&gt;  &lt;span style="BACKGROUND-COLOR:#ffff99"&gt;this.__defineGetter__("foo", function() {&lt;/span&gt;&lt;br/&gt;    return t;&lt;br/&gt;  });&lt;br/&gt;  return t;&lt;br/&gt;});&lt;br/&gt;&lt;br/&gt;// To the user, foo appears as a plain old&lt;br/&gt;// non-function valued property of the global object.&lt;br/&gt;console.log(&lt;font color="#ff0000"&gt;this.foo&lt;/font&gt;);&lt;br/&gt;setTimeout(function(){console.log(&lt;font color="#ff0000"&gt;this.foo&lt;/font&gt;);}, 3000);&lt;/code&gt;&lt;/pre&gt; &lt;/div&gt; &lt;br/&gt; &lt;span style="FONT-WEIGHT:bold"&gt;參考資料&lt;/span&gt;&lt;br/&gt; [1] Peter, "&lt;a href="http://peter.michaux.ca/article/3556"&gt;Lazy Function Definition Pattern&lt;/a&gt;"&lt;br/&gt; [2] &lt;small&gt; &lt;/small&gt;Eric Miraglia, "&lt;a href="http://yuiblog.com/blog/2007/06/12/module-pattern/" rel="bookmark" title="Permanent Link to A JavaScript Module Pattern"&gt;A JavaScript Module Pattern&lt;/a&gt;"&lt;br/&gt; [3] "&lt;a href="http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Creating_New_Objects:Defining_Getters_and_Setters" id="hc:j" title="Core JavaScript 1.5 Guide:Creating New Objects:Defining Getters and Setters"&gt;Core JavaScript 1.5 Guide:Creating New Objects:Defining Getters and Setters&lt;/a&gt;"&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-3562024382606841031?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/3562024382606841031/comments/default" title="張貼意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/3562024382606841031?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/3562024382606841031?v=2" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total></entry><entry gd:etag="W/&quot;DEcDRX88eyp7ImA9WB5VFUQ.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-3628566105137900289</id><published>2007-08-08T10:57:00.000-07:00</published><updated>2007-08-08T11:01:14.173-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-08T11:01:14.173-07:00</app:edited><title /><content type="html">    &lt;div style="text-align: center;"&gt;   &lt;font size="4"&gt;&lt;span style="font-weight: bold;"&gt;C++ 使用 JScript 和 VBScript   &lt;/span&gt;&lt;/font&gt;&lt;br&gt; &lt;/div&gt; &lt;span&gt;&lt;a href="http://chuiwenchiu.spaces.live.com/"&gt;&lt;u&gt;Live Space&lt;/u&gt;&lt;/a&gt;、&lt;a href="http://docs.google.com/Doc?docid=dcxw59mr_1677fv25sh" title="Google Doc"&gt;&lt;u&gt;Google Doc&lt;/u&gt;&lt;/a&gt;、&lt;a href="http://chuiwenchiu-arick.blogspot.com/"&gt;&lt;u&gt;Google Blog&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; Chui-Wen Chiu&lt;br&gt; 2007.08.08&lt;br&gt; &lt;br&gt; &lt;span style="font-weight: bold;"&gt;測試環境&lt;/span&gt;&lt;br&gt; 1. Windows XP Pro SP2&lt;br&gt; 2. Visual Studio 2005&lt;br&gt; &lt;br&gt;&lt;span style="font-weight: bold;"&gt;範例程式&lt;/span&gt;：&lt;a title="下載" href="http://sisimi.pchome.googlepages.com/20070808.rar"&gt;下載&lt;/a&gt; &lt;br&gt;&lt;br&gt; 一般 C++ 會使用 Python  作為 Script 引擎，但本文將說明透過 Windows 內建的 Script 引擎，讓 C++ 可以使用 VBScript 或 JScript 引擎。一切的核心是由 &lt;span&gt;Microsoft Scripting ActiveX （&lt;/span&gt;MSSCR.OCX)元件所提供，由於是 COM 元件，所以，其他支援 COM 的語言也可透過類似的方法達到。&lt;br&gt; &lt;br&gt; 以下是 C++ 使用 JScript 的簡單範例&lt;br&gt; &lt;div&gt;   &lt;table bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         &lt;font style="font-weight: bold;" color="#cc0000"&gt; #import "msscript.ocx"         no_namespace&lt;/font&gt;&lt;br&gt;         #include &amp;lt;comutil.h&amp;gt;&lt;br&gt;         #include &amp;lt;tchar.h&amp;gt;&lt;br&gt;         &lt;br&gt;         const TCHAR JSCRIPT[]        =         _T("JScript");&lt;br&gt;         const int LANGUAGE_NAME_LEN    = 40;&lt;br&gt;         &lt;br&gt;         int main(int argc, _TCHAR* argv[]){&lt;br&gt;             CoInitialize(NULL);&lt;br&gt;         &lt;br&gt;             &lt;font color="#009900"&gt;// 建立 COM 元件&lt;/font&gt;&lt;br&gt;                     &lt;font style="font-weight: bold;" color="#cc0000"&gt;IScriptControlPtr         m_pScript;  &lt;/font&gt; &lt;br&gt;                     &lt;font style="font-weight: bold;" color="#cc0000"&gt;HRESULT hr =         m_pScript.CreateInstance(__uuidof(ScriptControl));&lt;/font&gt;&lt;br&gt;             _com_util::CheckError( hr );&lt;br&gt;         &lt;br&gt;             &lt;font color="#009900"&gt;// 設定 Script Engine&lt;/font&gt;&lt;br&gt;             TCHAR            m_szLanguage[LANGUAGE_NAME_LEN+1];   &lt;br&gt;             _tcscpy(m_szLanguage, JSCRIPT);&lt;br&gt;                     &lt;font style="font-weight: bold;" color="#cc0000"&gt;m_pScript-&amp;gt;PutAllowUI&lt;/font&gt;(         VARIANT_FALSE );   &lt;br&gt;                     &lt;font color="#cc0000"&gt;&lt;span style="font-weight: bold;"&gt;m_pScript-&amp;gt;PutLanguage&lt;/span&gt;&lt;/font&gt;(         _bstr_t(m_szLanguage ) );&lt;br&gt;         &lt;br&gt;             &lt;font color="#009900"&gt;// 宣告一個新函數&lt;/font&gt;&lt;br&gt;             _bstr_t strCode =         _T("&lt;span style="background-color: rgb(255, 255, 153);"&gt;function calc(a, b){ return         a+b; }&lt;/span&gt;");&lt;br&gt;                     &lt;font style="font-weight: bold;" color="#cc0000"&gt;m_pScript-&amp;gt;AddCode&lt;/font&gt;(         strCode );&lt;br&gt;         &lt;br&gt;             &lt;font color="#009900"&gt;// 參數設定&lt;/font&gt;&lt;br&gt;             SAFEARRAY* saParameters;&lt;br&gt;             saParameters = SafeArrayCreateVector(VT_VARIANT, 0,         2);&lt;br&gt;             _variant_t var;   &lt;br&gt;         &lt;br&gt;             long lIndices = 0;&lt;br&gt;             var = 33;&lt;br&gt;             SafeArrayPutElement(saParameters, &amp;amp;lIndices,         (void*)&amp;amp;var);   &lt;br&gt;         &lt;br&gt;             lIndices = 1;&lt;br&gt;             var = 44;&lt;br&gt;             SafeArrayPutElement(saParameters, &amp;amp;lIndices,         (void*)&amp;amp;var);   &lt;br&gt;         &lt;br&gt;             &lt;font color="#009900"&gt;// 呼叫函數 calc(33, 44) =         77&lt;/font&gt;&lt;br&gt;             VARIANT varRet =         &lt;font style="font-weight: bold;" color="#ff0000"&gt;m_pScript-&amp;gt;Run&lt;/font&gt;("&lt;span style="background-color: rgb(255, 255, 153);"&gt;calc&lt;/span&gt;",         &amp;amp;saParameters);&lt;br&gt;             LPCTSTR result = (LPCTSTR)_bstr_t(varRet);&lt;br&gt;         &lt;br&gt;         &lt;font color="#009900"&gt;    // 顯示結果&lt;/font&gt;&lt;br&gt;             MessageBox(0, result, _T("Result"), 0);&lt;br&gt;         &lt;br&gt;             m_pScript = NULL;&lt;br&gt;         &lt;br&gt;             CoUninitialize();&lt;br&gt;             return 0;&lt;br&gt;         }&lt;br&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt; &lt;br&gt; 只要將上述程式稍作修改，即可改用 VBScript 引擎&lt;br&gt; &lt;br&gt; &lt;div&gt;   &lt;table bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         &lt;font style="font-weight: bold;" color="#cc0000"&gt; #import "msscript.ocx"         no_namespace&lt;/font&gt;&lt;br&gt;         #include &amp;lt;comutil.h&amp;gt;&lt;br&gt;         #include &amp;lt;tchar.h&amp;gt;&lt;br&gt;         &lt;br&gt;         const TCHAR VBSCRIPT[]        =         _T("VBScript");&lt;br&gt;         const int LANGUAGE_NAME_LEN    = 40;&lt;br&gt;         &lt;br&gt;         int main(int argc, _TCHAR* argv[]){&lt;br&gt;             CoInitialize(NULL);&lt;br&gt;         &lt;br&gt;             &lt;font color="#009900"&gt;// 建立 COM 元件&lt;/font&gt;&lt;br&gt;                     &lt;font style="font-weight: bold;" color="#cc0000"&gt;IScriptControlPtr         m_pScript;  &lt;/font&gt; &lt;br&gt;                     &lt;font style="font-weight: bold;" color="#cc0000"&gt;HRESULT hr =         m_pScript.CreateInstance(__uuidof(ScriptControl));&lt;/font&gt;&lt;br&gt;             _com_util::CheckError( hr );&lt;br&gt;         &lt;br&gt;             &lt;font color="#009900"&gt;// 設定 Script Engine&lt;/font&gt;&lt;br&gt;             TCHAR            m_szLanguage[LANGUAGE_NAME_LEN+1];   &lt;br&gt;             _tcscpy(m_szLanguage, VBSCRIPT);&lt;br&gt;                     &lt;font style="font-weight: bold;" color="#cc0000"&gt;m_pScript-&amp;gt;PutAllowUI&lt;/font&gt;(         VARIANT_FALSE );   &lt;br&gt;                     &lt;font color="#cc0000"&gt;&lt;span style="font-weight: bold;"&gt;m_pScript-&amp;gt;PutLanguage&lt;/span&gt;&lt;/font&gt;(         _bstr_t(m_szLanguage ) );&lt;br&gt;         &lt;br&gt;             &lt;font color="#009900"&gt;// 宣告一個新函數&lt;/font&gt;&lt;br&gt;             _bstr_t strCode =         _T("&lt;span style="background-color: rgb(255, 255, 153);"&gt;Function calc(a,b) calc =         CInt(a)+CInt(b) End Function&lt;/span&gt;");&lt;br&gt;                     &lt;font style="font-weight: bold;" color="#cc0000"&gt;m_pScript-&amp;gt;AddCode&lt;/font&gt;(         strCode );&lt;br&gt;         &lt;br&gt;             &lt;font color="#009900"&gt;// 參數設定&lt;/font&gt;&lt;br&gt;             SAFEARRAY* saParameters;&lt;br&gt;             saParameters = SafeArrayCreateVector(VT_VARIANT, 0,         2);&lt;br&gt;             _variant_t var;   &lt;br&gt;         &lt;br&gt;             long lIndices = 0;&lt;br&gt;             var = 33;&lt;br&gt;             SafeArrayPutElement(saParameters, &amp;amp;lIndices,         (void*)&amp;amp;var);   &lt;br&gt;         &lt;br&gt;             lIndices = 1;&lt;br&gt;             var = 44;&lt;br&gt;             SafeArrayPutElement(saParameters, &amp;amp;lIndices,         (void*)&amp;amp;var);   &lt;br&gt;         &lt;br&gt;             &lt;font color="#009900"&gt;// 呼叫函數 calc(33, 44) =         77&lt;/font&gt;&lt;br&gt;             VARIANT varRet =         &lt;font style="font-weight: bold;" color="#ff0000"&gt;m_pScript-&amp;gt;Run&lt;/font&gt;("&lt;span style="background-color: rgb(255, 255, 153);"&gt;calc&lt;/span&gt;",         &amp;amp;saParameters);&lt;br&gt;             LPCTSTR result = (LPCTSTR)_bstr_t(varRet);&lt;br&gt;         &lt;br&gt;         &lt;font color="#009900"&gt;    // 顯示結果&lt;/font&gt;&lt;br&gt;             MessageBox(0, result, _T("Result"), 0);&lt;br&gt;         &lt;br&gt;             m_pScript = NULL;&lt;br&gt;         &lt;br&gt;             CoUninitialize();&lt;br&gt;             return 0;&lt;br&gt;         }&lt;br&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt; &lt;br&gt; 上述的片段用來了解 Script 引擎是相當好，可是實務上太過於瑣碎不容易維護。所以，[1] 提供兩個好用輔助類別：CScriptObject 和 CSafeArrayHelper。下面使用這兩個類別改寫上述 JScript 的範例。&lt;br&gt; &lt;br&gt; &lt;div&gt;   &lt;table bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         #include &amp;lt;tchar.h&amp;gt;&lt;br&gt;         #include &amp;lt;windows.h&amp;gt;&lt;br&gt;         &lt;br&gt;         &lt;font style="font-weight: bold;" color="#cc0000"&gt;#include "ScriptObject.h"&lt;br&gt;         #include "SafeArrayHelper.h"&lt;/font&gt;&lt;br&gt;         &lt;br&gt;         int main(int argc, _TCHAR* argv[]){&lt;br&gt;             CoInitialize(NULL);&lt;br&gt;         &lt;br&gt;                     &lt;font color="#ff0000"&gt;&lt;span style="font-weight: bold;"&gt;CScriptObject*            m_ScriptObj = new CScriptObject();&lt;/span&gt;&lt;/font&gt;&lt;br&gt;         &lt;br&gt;                     &lt;font color="#009900"&gt;&lt;span style="font-weight: bold;"&gt;// 設定 Script         Engine&lt;/span&gt;&lt;/font&gt;&lt;br&gt;                     &lt;font style="font-weight: bold;" color="#cc0000"&gt;m_ScriptObj-&amp;gt;SetLanguage&lt;/font&gt;(         _T("&lt;span style="background-color: rgb(255, 255, 153);"&gt;JScript&lt;/span&gt;") );&lt;br&gt;         &lt;br&gt;                     &lt;font color="#009900"&gt;&lt;span style="font-weight: bold;"&gt;//         宣告一個新函數&lt;/span&gt;&lt;/font&gt;&lt;br&gt;                     &lt;font style="font-weight: bold;" color="#cc0000"&gt;m_ScriptObj-&amp;gt;AddScript&lt;/font&gt;(         _T("&lt;span style="background-color: rgb(255, 255, 153);"&gt;function calc(a, b){ return         a+b; }&lt;/span&gt;") );&lt;br&gt;         &lt;br&gt;                     &lt;font color="#009900"&gt;&lt;span style="font-weight: bold;"&gt;//         參數設定&lt;/span&gt;&lt;/font&gt;&lt;br&gt;             CSafeArrayHelper sfHelper;&lt;br&gt;             _variant_t var;&lt;br&gt;             sfHelper.Create(VT_VARIANT, 1, 0,         2);   &lt;br&gt;             var = 33;&lt;br&gt;             sfHelper.PutElement(0,         (void*)&amp;amp;var);   &lt;br&gt;         &lt;br&gt;             var = 44;&lt;br&gt;             sfHelper.PutElement(1,         (void*)&amp;amp;var);   &lt;br&gt;         &lt;br&gt;             LPSAFEARRAY sa =  sfHelper.GetArray();&lt;br&gt;             _variant_t varRet;&lt;br&gt;         &lt;br&gt;                     &lt;font color="#009900"&gt;&lt;span style="font-weight: bold;"&gt;//         呼叫函數&lt;/span&gt;&lt;/font&gt;&lt;br&gt;                     &lt;font style="font-weight: bold;" color="#cc0000"&gt;m_ScriptObj-&amp;gt;RunProcedure&lt;/font&gt;(_T("&lt;span style="background-color: rgb(255, 255, 153);"&gt;calc&lt;/span&gt;"),         &amp;amp;sa, &amp;amp;varRet);&lt;br&gt;             LPCTSTR result = (LPCTSTR)_bstr_t(varRet);&lt;br&gt;         &lt;br&gt;             // 顯示結果&lt;br&gt;             MessageBox(0, result, _T("Result"), 0);&lt;br&gt;         &lt;br&gt;             delete m_ScriptObj;&lt;br&gt;         &lt;br&gt;             CoUninitialize();&lt;br&gt;         }&lt;br&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt; &lt;br&gt;上述三個範例的執行結果都是如下：&lt;br&gt;&lt;div style="padding: 1em 0pt; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dcxw59mr_1678ctwtk2ff"&gt;&lt;/div&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br&gt;&lt;span style="font-weight: bold;"&gt;參考資料&lt;/span&gt;&lt;br&gt; &lt;span class="bodycopy"&gt;&lt;/span&gt;[1] Ernest Laurentin, "&lt;a href="http://www.codeproject.com/com/scriptdemo.asp" title="Adding VBScript and JScript support in your C++ applications"&gt;Adding VBScript and JScript support in your C++ applications&lt;/a&gt;"&lt;br&gt; &lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-3628566105137900289?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/3628566105137900289/comments/default" title="張貼意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/3628566105137900289?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/3628566105137900289?v=2" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CUANQXY_eyp7ImA9WB5VEE8.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-7226514833439756398</id><published>2007-08-01T20:03:00.000-07:00</published><updated>2007-08-01T20:03:10.843-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-01T20:03:10.843-07:00</app:edited><title /><content type="html">&lt;div style="text-align: center;"&gt;&lt;font size="4"&gt;&lt;span style="font-weight: bold;"&gt;Ext.js 釋出 1.1 版&lt;/span&gt;&lt;/font&gt;&lt;br&gt;&lt;/div&gt;&lt;span&gt;&lt;a href="http://chuiwenchiu.spaces.live.com/"&gt;&lt;u&gt;Live Space&lt;/u&gt;&lt;/a&gt;、&lt;a href="http://docs.google.com/Doc?id=dcxw59mr_1656fkb95m" title="Google Doc"&gt;&lt;u&gt;Google Doc&lt;/u&gt;&lt;/a&gt;、&lt;a href="http://chuiwenchiu-arick.blogspot.com/"&gt;&lt;u&gt;Google Blog&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt;Chui-Wen Chiu&lt;br&gt;2007.08.02&lt;br&gt;&lt;br&gt;本次更新包含獨立運作版本的 Ext，一個輕量級的 HTML 編輯器、新的 Ext.Ajax 應用類別，另外也強化 DateField 和 DatePicker 元件。&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;獨立運作版本的 Ext&lt;/li&gt;&lt;ul&gt;&lt;li&gt;可選擇性的引入外部函數庫，如：jQuery, YUI, prototype&lt;/li&gt;&lt;li&gt;有效降低佈署時的檔案大小&lt;/li&gt;&lt;li&gt;使用時只需要引入&lt;/li&gt;&lt;ul&gt;&lt;li&gt;ext-base.js&lt;/li&gt;&lt;li&gt;ext-all.js&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;輕量級 HTML 編輯器&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;img src="http://extjs.com/playpen/screenshots/ext1.1/html.gif" height="200" width="550"&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;強化版 DateField&lt;/li&gt;&lt;ul&gt;&lt;li&gt;新增解析使用者輸入的日期字串&lt;/li&gt;&lt;li&gt;新增年、月選擇方式&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; &lt;p&gt;&lt;img src="http://extjs.com/playpen/screenshots/ext1.1/dates.gif" height="228" width="556"&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Ext.Ajax &lt;br&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;1.0 版的 Ajax 與 YUI 綁在一起，1.1 版已經切割成可獨立運作的 Ajax 類別。&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br&gt;下載&lt;a title="網址" target="_blank" href="http://extjs.com/deploy/ext-1.1.zip"&gt;網址&lt;/a&gt; &lt;br&gt;&lt;a title="1.1 版線上 API 文件" target="_blank" href="http://extjs.com/deploy/ext-1.1/docs/"&gt;1.1 版線上 API 文件&lt;/a&gt; &lt;br&gt;&lt;br&gt;&lt;span style="font-weight: bold;"&gt;參考資料&lt;/span&gt;&lt;br&gt;[1] http://extjs.com/blog/2007/08/01/ext-v11-released/&lt;br&gt;  &lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-7226514833439756398?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/7226514833439756398/comments/default" title="張貼意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/7226514833439756398?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/7226514833439756398?v=2" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;C0MDRn85fCp7ImA9WB5VEE8.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-4313461323371623585</id><published>2007-08-01T19:24:00.000-07:00</published><updated>2007-08-01T19:24:37.124-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-01T19:24:37.124-07:00</app:edited><title /><content type="html">&lt;div style="text-align: center;"&gt;   &lt;font size="4"&gt;&lt;span style="font-weight: bold;"&gt;YUI 釋出 2.3 版&lt;/span&gt;&lt;/font&gt; &lt;/div&gt; &lt;div&gt;   &lt;div&gt;     &lt;div name="SpaceTemplateRegion"&gt;       &lt;table class="ClassicTwoCol" href="http://spaces.msn.com/chuiwenchiu" cellpadding="0" cellspacing="0"&gt;         &lt;tbody href="http://spaces.msn.com/chuiwenchiu"&gt;         &lt;tr href="http://spaces.msn.com/chuiwenchiu"&gt;           &lt;td class="ZigZagSpanFirst" href="http://spaces.msn.com/chuiwenchiu"&gt;             &lt;div class="Widget FullRegionWidth"&gt;               &lt;div class="ContainerMovable spDefaultFrame SPTransparency"&gt;                 &lt;div class="ContainerPadding"&gt;                   &lt;span&gt;                   &lt;div&gt;                     &lt;div border="0" cellspacing="0" class="fixedTable bvEntry" width="100%"&gt;                       &lt;h4&gt;                         &lt;span class="postTitle" style="border-width: 0px; margin: 0px; padding: 0px;"&gt;&lt;/span&gt;                       &lt;/h4&gt;                     &lt;/div&gt;                   &lt;/div&gt;                   &lt;/span&gt;                 &lt;/div&gt;               &lt;/div&gt;             &lt;/div&gt;           &lt;/td&gt;         &lt;/tr&gt;         &lt;/tbody&gt;       &lt;/table&gt;&lt;span&gt;&lt;a href="http://chuiwenchiu.spaces.live.com/"&gt;&lt;u&gt;Live Space&lt;/u&gt;&lt;/a&gt;、&lt;a href="Doc?id=dcxw59mr_1619df9dc4" title="Google Doc"&gt;&lt;u&gt;Google Doc&lt;/u&gt;&lt;/a&gt;、&lt;a href="http://chuiwenchiu-arick.blogspot.com/"&gt;&lt;u&gt;Google Blog&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt;Chui-Wen Chiu&lt;br&gt;       2007.08.02&lt;br&gt;       &lt;br&gt;       YUI 這次主要新增下面六大元件&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://developer.yahoo.com/yui/editor/"&gt;Rich Text Editor&lt;/a&gt;: 跨瀏覽器的文字編輯器&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.yahoo.com/yui/base/"&gt;Base CSS&lt;/a&gt;: 擴充原有的 YUI CSS 功能，共包含 Base CSS, Fonts CSS, Reset CSS, Grids CSS&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.yahoo.com/yui/yuiloader"&gt;YUILoader&lt;/a&gt;: 動態載入 YUI 元件&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.yahoo.com/yui/imageloader/"&gt;ImageLoader&lt;/a&gt;: 動態載入影像&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.yahoo.com/yui/colorpicker/"&gt;ColorPicker&lt;/a&gt;: 色彩選擇元件&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.yahoo.com/yui/yuitest/"&gt;YUI Test Utility&lt;/a&gt;: YUI 單元測試工具&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;下載&lt;a title="網址" href="http://developer.yahoo.com/yui/download/"&gt;網址&lt;/a&gt; &lt;br&gt;&lt;br&gt;            &lt;/div&gt;   &lt;/div&gt;   &lt;span style="font-weight: bold;"&gt;參考資料&lt;/span&gt;&lt;br&gt;   [1] &lt;a href="http://ajaxian.com/archives/yui-23-released-rich-text-editor-components-and-themes" rel="bookmark" title="Permanent Link to YUI 2.3 Released: Rich Text Editor, Components, and Themes"&gt;YUI 2.3 Released: Rich Text Editor, Components, and Themes&lt;/a&gt;&lt;br&gt;   [2]&lt;a href="http://yuiblog.com/blog/2007/07/31/yui-2-3-0-released/" rel="bookmark" title="Permanent Link to YUI 2.3.0: Six New Components and a Prettier Face"&gt; YUI 2.3.0: Six New Components and a Prettier Face&lt;/a&gt;   &lt;h2&gt;   &lt;/h2&gt;   &lt;br&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-4313461323371623585?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/4313461323371623585/comments/default" title="張貼意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/4313461323371623585?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/4313461323371623585?v=2" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D0QEQHw_cSp7ImA9WB5WGEQ.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-3049045713243126567</id><published>2007-07-31T08:21:00.000-07:00</published><updated>2007-07-31T08:21:41.249-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-07-31T08:21:41.249-07:00</app:edited><title /><content type="html">&lt;div style="text-align: center;"&gt;   &lt;font size="4"&gt;&lt;span style="font-weight: bold;"&gt;C# 實作 ObjectFactory&lt;/span&gt;&lt;/font&gt;&lt;br&gt; &lt;/div&gt; &lt;span&gt;&lt;a href="http://chuiwenchiu.spaces.live.com/"&gt;&lt;u&gt;MSN Space&lt;/u&gt;&lt;/a&gt;、&lt;a href="http://docs.google.com/Doc?id=dcxw59mr_1619df9dc4" title="Google Doc"&gt;&lt;u&gt;Google Doc&lt;/u&gt;&lt;/a&gt;、&lt;a href="http://chuiwenchiu-arick.blogspot.com/"&gt;&lt;u&gt;Google Blog&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; Chui-Wen Chiu&lt;br&gt; 2007.07.31&lt;br&gt; &lt;br&gt; 上次實作 &lt;a href="http://docs.google.com/Doc?docid=dcxw59mr_1569fhdd6d" title="C++ 版本的 ObjectFactory"&gt;C++ 版本的 ObjectFactory&lt;/a&gt; 之後，最近又需要實作 C# 版本的 ObjectFactory，於是在網路上找到[1]這篇文章。實作 ObjectFactory 的關鍵在於定義了 Factory Method 得 Delegate。讓需要納入 ObjectFactory 的每一個類別都需要實作該 Delegate。我們直接以 [1] 中的範例來了解 ObjectFactory 實作的概念。&lt;br&gt; &lt;br&gt; 首先定義 Factory Method 的 Delegate 如下：&lt;span&gt; &lt;/span&gt;&lt;br&gt; &lt;div&gt;   &lt;table bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         &lt;span&gt;         &lt;pre lang="cs"&gt;&lt;span class="cs-comment"&gt;/// &amp;lt;SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="cs-comment"&gt;/// A handler function for the factory to create objects;&lt;/span&gt;&lt;br&gt;&lt;span class="cs-comment"&gt;/// &amp;lt;/SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="cs-keyword"&gt;public&lt;/span&gt; &lt;span class="cs-keyword"&gt;delegate&lt;/span&gt; AObject ObjectCreator(&lt;span class="cs-keyword"&gt;params&lt;/span&gt; &lt;span class="cs-keyword"&gt;object&lt;/span&gt; [] list);&lt;/pre&gt;         &lt;/span&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt; &lt;br&gt; 接著定義要透過 ObjectFactory 生成的基礎類別，&lt;span&gt;&lt;/span&gt; &lt;div&gt;   &lt;table bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         &lt;span&gt;         &lt;pre lang="cs"&gt;&lt;span class="cs-comment"&gt;/// &amp;lt;SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="cs-comment"&gt;/// Summary description for AObject.&lt;/span&gt;&lt;br&gt;&lt;span class="cs-comment"&gt;/// &amp;lt;/SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="cs-keyword"&gt;public&lt;/span&gt; &lt;span class="cs-keyword"&gt;abstract&lt;/span&gt; &lt;span class="cs-keyword"&gt;class&lt;/span&gt; AObject&lt;br&gt;{&lt;br&gt;&lt;span class="cs-preprocessor"&gt;    #region Override&lt;/span&gt;&lt;br&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// &amp;lt;SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// Force all descendents to implement.&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// &amp;lt;/SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-keyword"&gt;public&lt;/span&gt; &lt;span class="cs-keyword"&gt;abstract&lt;/span&gt; &lt;span class="cs-keyword"&gt;void&lt;/span&gt; Print();&lt;br&gt;&lt;br&gt;&lt;span class="cs-preprocessor"&gt;    #endregion&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="cs-preprocessor"&gt;    #region protected&lt;/span&gt;&lt;br&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// &amp;lt;SUMMARY&amp;gt;Some variable to play with.&amp;lt;/SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;font style="font-weight: bold;" color="#ff0000"&gt;&lt;span class="cs-keyword"&gt;protected&lt;/span&gt; Int32 m_nType;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;span class="cs-preprocessor"&gt;    #endregion&lt;/span&gt;&lt;br&gt;}&lt;/pre&gt;         &lt;/span&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt; &lt;span&gt; &lt;/span&gt;&lt;br&gt; [1] 使用抽象類別來實作，這不是必須的，你可以依據自己的需要作調整。接著定義你自己的類別族群，以下定義一個示範用的 Class1&lt;br&gt; &lt;div&gt;   &lt;table bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         &lt;span&gt;         &lt;pre style="margin-top: 0pt;" lang="cs"&gt;&lt;span class="cs-comment"&gt;/// &amp;lt;SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="cs-comment"&gt;/// Summary description for Class1.&lt;/span&gt;&lt;br&gt;&lt;span class="cs-comment"&gt;/// &amp;lt;/SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="cs-keyword"&gt;public&lt;/span&gt; &lt;span class="cs-keyword"&gt;class&lt;/span&gt; Class1 &lt;font color="#ff0000"&gt;: AObject&lt;br&gt;&lt;/font&gt;{&lt;br&gt;&lt;span class="cs-preprocessor"&gt;    #region Constants&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;font color="#009900"&gt;    &lt;span class="cs-comment"&gt;/// &amp;lt;SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// 識別碼&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// &amp;lt;/SUMMARY&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br&gt;    &lt;font color="#ff0000"&gt;&lt;span class="cs-keyword"&gt;public&lt;/span&gt; &lt;span class="cs-keyword"&gt;const&lt;/span&gt; Int32 ClassType = &lt;span class="cs-literal"&gt;1&lt;/span&gt;;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;span class="cs-preprocessor"&gt;    #endregion&lt;/span&gt;&lt;br&gt;        &lt;br&gt;&lt;span class="cs-preprocessor"&gt;    #region C'tor&lt;/span&gt;&lt;br&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// &amp;lt;SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// Default C'tor.&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// &amp;lt;/SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-keyword"&gt;internal&lt;/span&gt; Class1()&lt;br&gt;    {&lt;br&gt;        &lt;span class="cs-keyword"&gt;this&lt;/span&gt;.m_nType = ClassType;&lt;br&gt;    }&lt;br&gt;&lt;br&gt;&lt;span class="cs-preprocessor"&gt;    #endregion&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="cs-preprocessor"&gt;    #region Overrides&lt;/span&gt;&lt;br&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// &amp;lt;SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// Implementation of Print.&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// &amp;lt;/SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-keyword"&gt;public&lt;/span&gt; &lt;span class="cs-keyword"&gt;override&lt;/span&gt; &lt;span class="cs-keyword"&gt;void&lt;/span&gt; Print()&lt;br&gt;    {&lt;br&gt;        String msg = String.Format(&lt;span class="cpp-string"&gt;"Class: {0, 20} Value: {1, 10}"&lt;/span&gt;,&lt;br&gt;                                          ToString(), m_nType*&lt;span class="cs-literal"&gt;67&lt;/span&gt;);&lt;br&gt;        Console.WriteLine(msg);&lt;br&gt;    }&lt;br&gt;&lt;br&gt;&lt;span class="cs-preprocessor"&gt;    #endregion&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="cs-preprocessor"&gt;    #region Static&lt;/span&gt;&lt;br&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// &amp;lt;SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// A handler function for the factory to create objects;&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// &amp;lt;/SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// The parameter list.&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// &amp;lt;RETURNS&amp;gt;A Class1 object.&amp;lt;/RETURNS&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;font color="#ff0000"&gt;&lt;span class="cs-keyword"&gt;public&lt;/span&gt; &lt;span class="cs-keyword"&gt;static&lt;/span&gt; AObject &lt;span style="background-color: rgb(255, 255, 153);"&gt;ObjectCreator&lt;/span&gt;(&lt;span class="cs-keyword"&gt;params&lt;/span&gt; &lt;span class="cs-keyword"&gt;object&lt;/span&gt;[] list)&lt;/font&gt;&lt;br&gt;    {&lt;br&gt;        &lt;span class="cs-keyword"&gt;return&lt;/span&gt; &lt;span class="cs-keyword"&gt;new&lt;/span&gt; Class1();&lt;br&gt;    }&lt;br&gt;&lt;br&gt;&lt;span class="cs-preprocessor"&gt;    #endregion&lt;/span&gt;&lt;br&gt;}&lt;/pre&gt;         &lt;/span&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt; &lt;br&gt; 最後以上述為基礎所設計的 ObjectFactory 如下：&lt;br&gt; &lt;div&gt;   &lt;table bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         &lt;span&gt;         &lt;pre style="margin-top: 0pt;" lang="cs"&gt;&lt;span class="cs-comment"&gt;/// &amp;lt;SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="cs-comment"&gt;/// Summary description for ObjectFactory.&lt;/span&gt;&lt;br&gt;&lt;span class="cs-comment"&gt;/// &amp;lt;/SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class="cs-keyword"&gt;public&lt;/span&gt; &lt;span class="cs-keyword"&gt;class&lt;/span&gt; ObjectFactory&lt;br&gt;{&lt;br&gt;&lt;span class="cs-preprocessor"&gt;    #region Static&lt;/span&gt;&lt;br&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// &amp;lt;SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// Register handler functions to create new types of objects.&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// &amp;lt;/SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// The type of the object.&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// The handler function.&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// &amp;lt;RETURNS&amp;gt;true if successful.&amp;lt;/RETURNS&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-keyword"&gt;public&lt;/span&gt; &lt;span class="cs-keyword"&gt;static&lt;/span&gt; &lt;span class="cs-keyword"&gt;bool&lt;/span&gt; &lt;font style="font-weight: bold;" color="#ff0000"&gt;RegisterHandler&lt;/font&gt;(Int32 type, ObjectCreator creator)&lt;br&gt;    {&lt;br&gt;        &lt;span class="cs-keyword"&gt;bool&lt;/span&gt; res = &lt;span class="cs-keyword"&gt;false&lt;/span&gt;;&lt;br&gt;        &lt;span class="cs-keyword"&gt;try&lt;/span&gt;&lt;br&gt;        {&lt;br&gt;            &lt;span class="cs-keyword"&gt;if&lt;/span&gt; (m_handlers[type] != &lt;span class="cs-keyword"&gt;null&lt;/span&gt;)&lt;br&gt;                &lt;span class="cs-keyword"&gt;return&lt;/span&gt; &lt;span class="cs-keyword"&gt;false&lt;/span&gt;;&lt;br&gt;            &lt;span class="cs-comment"&gt;// insert the handler to the table according to the type.&lt;/span&gt;&lt;br&gt;            m_handlers[type] = creator;&lt;br&gt;            res = &lt;span class="cs-keyword"&gt;true&lt;/span&gt;;&lt;br&gt;        }&lt;br&gt;        &lt;span class="cs-keyword"&gt;catch&lt;/span&gt;(Exception ex)&lt;br&gt;        {&lt;br&gt;            Console.WriteLine(&lt;span class="cpp-string"&gt;"Can't register handler - "&lt;/span&gt;+ex.Message);&lt;br&gt;        }&lt;br&gt;        &lt;span class="cs-keyword"&gt;return&lt;/span&gt; res;&lt;br&gt;    }&lt;br&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// &amp;lt;SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// Unregister handler functions according to type.&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// &amp;lt;/SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// The type of the object.&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// &amp;lt;RETURNS&amp;gt;true if successful.&amp;lt;/RETURNS&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-keyword"&gt;public&lt;/span&gt; &lt;span class="cs-keyword"&gt;static&lt;/span&gt; &lt;span class="cs-keyword"&gt;bool&lt;/span&gt; &lt;font style="font-weight: bold;" color="#ff0000"&gt;UnregisterHandler&lt;/font&gt;(Int32 type)&lt;br&gt;    {&lt;br&gt;        &lt;span class="cs-keyword"&gt;bool&lt;/span&gt; res = &lt;span class="cs-keyword"&gt;true&lt;/span&gt;;&lt;br&gt;        &lt;span class="cs-keyword"&gt;try&lt;/span&gt;&lt;br&gt;        {&lt;br&gt;            &lt;span class="cs-keyword"&gt;if&lt;/span&gt; (m_handlers[type] == &lt;span class="cs-keyword"&gt;null&lt;/span&gt;)&lt;br&gt;                &lt;span class="cs-keyword"&gt;return&lt;/span&gt; res;&lt;br&gt;            &lt;span class="cs-comment"&gt;// remove the handler to the table according to the type.&lt;/span&gt;&lt;br&gt;            m_handlers[type] = &lt;span class="cs-keyword"&gt;null&lt;/span&gt;;&lt;br&gt;            GC.Collect();&lt;br&gt;        }&lt;br&gt;        &lt;span class="cs-keyword"&gt;catch&lt;/span&gt;(Exception ex)&lt;br&gt;        {&lt;br&gt;            Console.WriteLine(&lt;span class="cpp-string"&gt;"Can't unregister handler - "&lt;/span&gt;+ex.Message);&lt;br&gt;            res = &lt;span class="cs-keyword"&gt;false&lt;/span&gt;;&lt;br&gt;        }&lt;br&gt;        &lt;span class="cs-keyword"&gt;return&lt;/span&gt; res;&lt;br&gt;    }&lt;br&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// &amp;lt;SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// This is the static method that creates all types of objects.&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// &amp;lt;/SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// &amp;lt;REMARKS&amp;gt;Factory method.&amp;lt;/REMARKS&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// The key of objects to create.&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// The parameter list for the object.&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// &amp;lt;RETURNS&amp;gt;An object.&amp;lt;/RETURNS&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-keyword"&gt;public&lt;/span&gt; &lt;span class="cs-keyword"&gt;static&lt;/span&gt; AObject &lt;font color="#ff0000"&gt;&lt;span style="font-weight: bold;"&gt;CreateObject&lt;/span&gt;&lt;/font&gt;(Int32 type, &lt;span class="cs-keyword"&gt;params&lt;/span&gt; &lt;span class="cs-keyword"&gt;object&lt;/span&gt; [] list)&lt;br&gt;    {&lt;br&gt;        AObject aobject = &lt;span class="cs-keyword"&gt;null&lt;/span&gt;;&lt;br&gt;        &lt;span class="cs-keyword"&gt;try&lt;/span&gt;&lt;br&gt;        {&lt;br&gt;            &lt;span class="cs-comment"&gt;// get the handler that creates the objects&lt;/span&gt;&lt;br&gt;            &lt;span style="background-color: rgb(255, 255, 102);"&gt;ObjectCreator creator = (ObjectCreator)m_handlers[type];&lt;/span&gt;&lt;br&gt;            &lt;span class="cs-comment"&gt;// create the object with the handler.&lt;/span&gt;&lt;br&gt;            &lt;span class="cs-keyword"&gt;if&lt;/span&gt; (creator != &lt;span class="cs-keyword"&gt;null&lt;/span&gt;)&lt;br&gt;                &lt;span style="background-color: rgb(255, 255, 102);"&gt;aobject = creator(list);&lt;/span&gt;&lt;br&gt;        }&lt;br&gt;        &lt;span class="cs-keyword"&gt;catch&lt;/span&gt;(Exception ex)&lt;br&gt;        {&lt;br&gt;            Console.WriteLine(&lt;span class="cpp-string"&gt;"Can't get object from handler - "&lt;/span&gt;+ex.Message);&lt;br&gt;        }&lt;br&gt;        &lt;span class="cs-keyword" style="background-color: rgb(255, 255, 153);"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 153);"&gt; aobject;&lt;/span&gt;&lt;br&gt;    }&lt;br&gt;&lt;br&gt;&lt;span class="cs-preprocessor"&gt;    #endregion&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class="cs-preprocessor"&gt;    #region Protected&lt;/span&gt;&lt;br&gt;&lt;br&gt;    &lt;span class="cs-comment"&gt;/// &amp;lt;SUMMARY&amp;gt; A table holding the handlers for creating objects. &amp;lt;/SUMMARY&amp;gt;&lt;/span&gt;&lt;br&gt;    &lt;span class="cs-keyword"&gt;protected&lt;/span&gt; &lt;span class="cs-keyword"&gt;static&lt;/span&gt; Hashtable m_handlers = &lt;span class="cs-keyword"&gt;new&lt;/span&gt; Hashtable();&lt;br&gt;&lt;br&gt;&lt;span class="cs-preprocessor"&gt;    #endregion&lt;/span&gt;&lt;br&gt;}&lt;/pre&gt;         &lt;/span&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt; &lt;br&gt; ObjectFactory 很典型的會有三個 Method：註冊(RegisterHandler)、移除(UnregisterHandler)和生成(CreateObject)。移除的 Method 不是很必要，註冊是將需要透過 ObjectFactory 生成的 FactoryMethod 紀錄起來，並透過特定的識別碼可以索引，上述是透過 Hashtable 來作對照表，我個人習慣採用 Dictionay&amp;lt;&amp;gt;。生成是透過識別碼取出對應的 FactoryMethod 進行物件生成，這也是定義 ObjectCreator 的目的，如果沒有這個規範的呼叫介面，很難讓 ObjectFactory 生成各種物件。&lt;span&gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;以下是 ObjectFactory 的使用：&lt;br&gt; &lt;div&gt;   &lt;table bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         &lt;span&gt;         &lt;pre style="margin-top: 0pt;" lang="cs"&gt;&lt;span class="cs-keyword"&gt;static&lt;/span&gt; &lt;span class="cs-keyword"&gt;void&lt;/span&gt; Main(&lt;span class="cs-keyword"&gt;string&lt;/span&gt;[] args)&lt;br&gt;{&lt;br&gt;    &lt;span class="cs-keyword"&gt;try&lt;/span&gt;&lt;br&gt;    {&lt;br&gt;        &lt;font color="#009900"&gt;&lt;span class="cs-comment"&gt;// 註冊 Factory Method&lt;/span&gt;&lt;/font&gt;&lt;br&gt;        &lt;span style="background-color: rgb(255, 255, 153);"&gt;ObjectFactory.RegisterHandler(Class1.ClassType,&lt;/span&gt; &lt;br&gt;                &lt;span style="background-color: rgb(255, 255, 153);" class="cs-keyword"&gt;new&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 153);"&gt; ObjectCreator(Class1.ObjectCreator));&lt;/span&gt;&lt;br&gt;        ObjectFactory.RegisterHandler(Class2.ClassType, &lt;br&gt;                &lt;span class="cs-keyword"&gt;new&lt;/span&gt; ObjectCreator(Class2.ObjectCreator));&lt;br&gt;        ObjectFactory.RegisterHandler(Class3.ClassType, &lt;br&gt;                &lt;span class="cs-keyword"&gt;new&lt;/span&gt; ObjectCreator(Class3.ObjectCreator));&lt;br&gt;&lt;br&gt;&lt;font color="#009900"&gt;	// 物件生成&lt;/font&gt;&lt;br&gt;        AObject aobject = &lt;span class="cs-keyword"&gt;null&lt;/span&gt;;&lt;br&gt;        &lt;span class="cs-comment"&gt;// creating the objects&lt;/span&gt;&lt;br&gt;        &lt;span class="cs-keyword"&gt;for&lt;/span&gt; (&lt;span class="cs-keyword"&gt;int&lt;/span&gt; i = &lt;span class="cs-literal"&gt;0&lt;/span&gt;; i&amp;lt;&lt;span class="cs-literal"&gt;100&lt;/span&gt;; i++)&lt;br&gt;        {&lt;br&gt;                &lt;span style="background-color: rgb(255, 255, 153);"&gt;aobject = ObjectFactory.CreateObject(i%&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 153);" class="cs-literal"&gt;3&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 153);"&gt;+&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 153);" class="cs-literal"&gt;1&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 153);"&gt;, &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 153);" class="cs-keyword"&gt;null&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 153);"&gt;);&lt;/span&gt;&lt;br&gt;                &lt;span style="background-color: rgb(255, 255, 153);"&gt;aobject.Print();&lt;/span&gt;&lt;br&gt;        }&lt;br&gt;&lt;br&gt;&lt;font color="#009900"&gt;        &lt;span class="cs-comment"&gt;// 移除 Factory Method&lt;/span&gt;&lt;/font&gt;&lt;br&gt;        &lt;span class="cs-keyword"&gt;if&lt;/span&gt; (!&lt;span style="background-color: rgb(255, 255, 153);"&gt;ObjectFactory.UnregisterHandler(Class1.ClassType)&lt;/span&gt;)&lt;br&gt;            Console.WriteLine(&lt;span class="cpp-string"&gt;"Really ?!"&lt;/span&gt;);&lt;br&gt;&lt;br&gt;        &lt;span class="cs-comment"&gt;// trying to create an unregistered type&lt;/span&gt;&lt;br&gt;        aobject = ObjectFactory.CreateObject(Class1.ClassType, &lt;span class="cs-keyword"&gt;null&lt;/span&gt;);&lt;br&gt;        &lt;span class="cs-keyword"&gt;if&lt;/span&gt; (aobject != &lt;span class="cs-keyword"&gt;null&lt;/span&gt;)&lt;br&gt;            aobject.Print();&lt;br&gt;        &lt;span class="cs-keyword"&gt;else&lt;/span&gt;&lt;br&gt;            Console.WriteLine(&lt;span class="cpp-string"&gt;"aobject is null"&lt;/span&gt;);&lt;br&gt;    }&lt;br&gt;    &lt;span class="cs-keyword"&gt;catch&lt;/span&gt; (Exception ex)&lt;br&gt;    {&lt;br&gt;        Console.WriteLine(ex.Message);&lt;br&gt;    }&lt;br&gt;    Console.ReadLine();&lt;br&gt;}&lt;/pre&gt;         &lt;/span&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt; &lt;br&gt; &lt;span style="font-weight: bold;"&gt;參考資料&lt;/span&gt;&lt;br&gt; [1] Asa Meltzer, "&lt;a href="http://www.codeproject.com/gen/design/DelegateFactory.asp" title="Delegate Factory"&gt;Delegate Factory&lt;/a&gt;"&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-3049045713243126567?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/3049045713243126567/comments/default" title="張貼意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/3049045713243126567?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/3049045713243126567?v=2" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DUAGQn4_fip7ImA9WB5WFEg.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-8704815722493772403</id><published>2007-07-26T06:48:00.000-07:00</published><updated>2007-07-26T06:48:43.046-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-07-26T06:48:43.046-07:00</app:edited><title /><content type="html">&lt;div style="TEXT-ALIGN:center"&gt;   &lt;font size="4"&gt;&lt;span style="FONT-WEIGHT:bold"&gt;建置 Silverlight 1.0   開發環境&lt;/span&gt;&lt;/font&gt;&lt;br/&gt; &lt;/div&gt; &lt;a href="http://chuiwenchiu.spaces.live.com/" title="MSN Space"&gt;&lt;u&gt;&lt;font color="#800080"&gt;MSN Space&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;、&lt;a href="http://docs.google.com/Doc?id=dcxw59mr_1614grvnk5" title="Google Doc"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;Google Doc&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; 、&lt;a href="http://chuiwenchiu-arick.blogspot.com/" title="Google Blog"&gt;&lt;u&gt;&lt;font color="#800080"&gt;Google Blog&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;br/&gt; Chui-Wen Chiu&lt;br/&gt; 2007.07.26&lt;br/&gt; &lt;br/&gt; &lt;span style="FONT-WEIGHT:bold"&gt;下載&lt;/span&gt;&lt;br/&gt; 1. &lt;a href="http://download.microsoft.com/download/f/8/1/f81931c5-a302-45be-adfa-942784b8a99f/Silverlight.1.0beta.exe" title="Sliverlight 1.0 Runtime"&gt;Sliverlight 1.0 Beta Runtime&lt;/a&gt;&lt;br/&gt; 2. &lt;a href="http://download.microsoft.com/download/c/4/9/c4914b0a-4624-48bd-8273-ff2b4373604a/Silverlight1.0SDK.zip" title="Sliverlight SDK 1.0 beta"&gt;Sliverlight SDK 1.0 beta&lt;/a&gt;&lt;br/&gt; 3. &lt;a href="http://download.microsoft.com/download/6/0/2/602c4039-b0e1-48c6-8a5d-e856e5162a06/Blend2.en.msi" title="Microsoft Blend 2.0 Preview"&gt;Microsoft Blend 2.0 Preview&lt;/a&gt;&lt;br/&gt; 4. &lt;a href="http://download.microsoft.com/download/4/4/6/446a5c50-36b1-44cb-8e6f-6fc3a084e3a6/Silverlight1.1SDK1.zip" title="Sliverlight SDK 1.1 alpha"&gt;Sliverlight SDK 1.1 alpha&lt;/a&gt;&lt;br/&gt; &lt;br/&gt; &lt;span style="FONT-WEIGHT:bold"&gt;安裝 Sliverlight 專案樣板&lt;/span&gt;&lt;br/&gt; &lt;br/&gt; 為了讓 VS 2005 能夠開發 Sliverlight，先下載 Sliverlight SDK(Silverlight1.0SDK.zip)，取出其中的 SilverlightBetaToolsForVS2005.zip，將內容解開後放置在 %My Document%Visual Studio 2005TemplatesProjectTemplatesSliverlight 1.0 beta，此時 VS2005 中可以使用 Sliverlight 專案，如下圖：&lt;br/&gt; &lt;div style="PADDING:1em 0pt; TEXT-ALIGN:left"&gt;   &lt;img src="http://docs.google.com/File?id=dcxw59mr_1615nwzk3jjk"/&gt; &lt;/div&gt; &lt;br/&gt; &lt;span style="FONT-WEIGHT:bold"&gt;安裝 XAML IntelliSense &lt;/span&gt;&lt;br/&gt; 從 Silverlight1.0SDK.zip 中取出 silverlight.xsd，並放置在 C:Program FilesMicrosoft Visual Studio 8XmlSchemas 目錄下。&lt;br/&gt; &lt;br/&gt; &lt;span style="FONT-WEIGHT:bold"&gt;專案樣板程式碼研究&lt;/span&gt;&lt;br/&gt; 使用 Sliverlight 1.0 Beta 專案樣板產生的專案共會產生下面五個檔案：&lt;br/&gt; &lt;div&gt;   &lt;table bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;     &lt;tr bgcolor="#ffff99" style="FONT-WEIGHT:bold"&gt;       &lt;td width="100%"&gt;         Default.html -- HTML UI 定義&lt;br/&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         &amp;lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"         "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd"&amp;gt;&lt;br/&gt;         &amp;lt;html xmlns="http://www.w3.org/1999/xhtml"&amp;gt;&lt;br/&gt;         &amp;lt;head&amp;gt;&lt;br/&gt;             &amp;lt;title&amp;gt;SilverlightJSApplication1&amp;lt;/title&amp;gt;&lt;br/&gt;         &lt;br/&gt;             &amp;lt;script type="text/javascript"         src="&lt;font color="#ff0000"&gt;Silverlight.js&lt;/font&gt;"&amp;gt;&amp;lt;/script&amp;gt;&lt;br/&gt;             &amp;lt;script type="text/javascript"         src="&lt;font color="#ff0000"&gt;Default.html.js&lt;/font&gt;"&amp;gt;&amp;lt;/script&amp;gt;&lt;br/&gt;             &amp;lt;script type="text/javascript"         src="&lt;font color="#ff0000"&gt;Scene.xaml.js&lt;/font&gt;"&amp;gt;&amp;lt;/script&amp;gt;&lt;br/&gt;         &amp;lt;/head&amp;gt;&lt;br/&gt;         &lt;br/&gt;         &amp;lt;body&amp;gt;&lt;br/&gt;             &amp;lt;div id="SilverlightControlHost"&amp;gt;&lt;br/&gt;                 &amp;lt;script         type="text/javascript"&amp;gt;&lt;br/&gt;                            &lt;font color="#ff0000" style="FONT-WEIGHT:bold"&gt;         createSilverlight(); &lt;font color="#009900"&gt;// 建立         Sliverlight&lt;/font&gt;&lt;/font&gt;&lt;br/&gt;                 &amp;lt;/script&amp;gt;&lt;br/&gt;             &amp;lt;/div&amp;gt;&lt;br/&gt;         &amp;lt;/body&amp;gt;&lt;br/&gt;         &amp;lt;/html&amp;gt;&lt;br/&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr bgcolor="#ffff99" style="FONT-WEIGHT:bold"&gt;       &lt;td width="100%"&gt;         Default.html.js -- HTML 事件處理&lt;br/&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         &lt;font color="#009900"&gt;/**&lt;br/&gt;          * 建立 Sliverlight&lt;br/&gt;          *&lt;br/&gt;          */&lt;/font&gt;&lt;br/&gt;         function         &lt;font color="#ff0000" style="FONT-WEIGHT:bold"&gt;createSilverlight&lt;/font&gt;()&lt;br/&gt;         {&lt;br/&gt;             var scene = new SilverlightJSApplication1.Scene();&lt;br/&gt;             Sys.Silverlight.createObjectEx({&lt;br/&gt;                 source: "Scene.xaml",&lt;br/&gt;                 parentElement:         document.getElementById("SilverlightControlHost"),&lt;br/&gt;                 id: "SilverlightControl",&lt;br/&gt;                 properties: {&lt;br/&gt;                     width: "400",&lt;br/&gt;                     height: "400",&lt;br/&gt;                     version: "0.9"&lt;br/&gt;                 },&lt;br/&gt;                 events: {&lt;br/&gt;                     onLoad:         Sys.Silverlight.createDelegate(scene, scene.handleLoad)&lt;br/&gt;                 }&lt;br/&gt;             });&lt;br/&gt;         }&lt;br/&gt;         &lt;br/&gt;         if (!window.Sys)&lt;br/&gt;             window.Sys = {};&lt;br/&gt;            &lt;br/&gt;         if (!window.Silverlight)&lt;br/&gt;             window.Silverlight = {};&lt;br/&gt;         &lt;br/&gt;         &lt;font color="#009900"&gt;/**&lt;br/&gt;          * 產生 create Delegate&lt;br/&gt;          *&lt;br/&gt;          * @param  instance   Scense 物件&lt;br/&gt;          * @param  method    instance 的 method&lt;br/&gt;          * @return  Function  呼叫 instance 的 member function 的         Function Object&lt;br/&gt;          */&lt;/font&gt;&lt;br/&gt;         &lt;font color="#ff0000"&gt;Sys.Silverlight.createDelegate&lt;/font&gt; =         function(instance, method) {&lt;br/&gt;             return function() {&lt;br/&gt;                 return method.apply(instance,         arguments);&lt;br/&gt;             }&lt;br/&gt;         }&lt;br/&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr bgcolor="#ffff99" style="FONT-WEIGHT:bold"&gt;       &lt;td width="100%"&gt;         Scense.xaml -- XAML UI 定義&lt;br/&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         &amp;lt;Canvas xmlns="http://schemas.microsoft.com/client/2007"         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&amp;gt;&lt;br/&gt;           &amp;lt;Canvas.Resources&amp;gt;&lt;br/&gt;             &amp;lt;Storyboard x:Name="mouseEnter"&amp;gt;&lt;br/&gt;               &amp;lt;ColorAnimation Duration="00:00:00.25"         To="#3DFFFFFF" Storyboard.TargetName="highlightEllipse"         Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" /&amp;gt;&lt;br/&gt;             &amp;lt;/Storyboard&amp;gt;&lt;br/&gt;             &amp;lt;Storyboard x:Name="mouseDown"&amp;gt;&lt;br/&gt;               &amp;lt;ColorAnimation Duration="00:00:00.2"         To="#22000000" Storyboard.TargetName="highlightEllipse"         Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" /&amp;gt;&lt;br/&gt;             &amp;lt;/Storyboard&amp;gt;&lt;br/&gt;             &amp;lt;Storyboard x:Name="mouseUp"&amp;gt;&lt;br/&gt;               &amp;lt;ColorAnimation Duration="00:00:00.2"         To="#3DFFFFFF" Storyboard.TargetName="highlightEllipse"         Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" /&amp;gt;&lt;br/&gt;             &amp;lt;/Storyboard&amp;gt;&lt;br/&gt;             &amp;lt;Storyboard x:Name="mouseLeave"&amp;gt;&lt;br/&gt;               &amp;lt;ColorAnimation Duration="00:00:00.25"         To="#00FFFFFF" Storyboard.TargetName="highlightEllipse"         Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" /&amp;gt;&lt;br/&gt;             &amp;lt;/Storyboard&amp;gt;   &lt;br/&gt;           &amp;lt;/Canvas.Resources&amp;gt;&lt;br/&gt;          &lt;br/&gt;           &amp;lt;Canvas Width="120" Height="44"&amp;gt;&lt;br/&gt;             &amp;lt;Rectangle StrokeThickness="4" RadiusX="17"         RadiusY="36" Width="120" Height="44" Stroke="#46000000"&amp;gt;&lt;br/&gt;               &amp;lt;Rectangle.Fill&amp;gt;&lt;br/&gt;                 &amp;lt;LinearGradientBrush         EndPoint="0.5,-0.409" StartPoint="0.5,1.409"&amp;gt;&lt;br/&gt;                   &amp;lt;GradientStop         Color="#FFD3BE46" Offset="0.242"/&amp;gt;&lt;br/&gt;                   &amp;lt;GradientStop         Color="#FFD79B03" Offset="0.333"/&amp;gt;&lt;br/&gt;                 &amp;lt;/LinearGradientBrush&amp;gt;&lt;br/&gt;               &amp;lt;/Rectangle.Fill&amp;gt;&lt;br/&gt;             &amp;lt;/Rectangle&amp;gt;&lt;br/&gt;             &lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;&amp;lt;TextBlock         Width="67" Height="23.2" Canvas.Left="29" Canvas.Top="10"         Foreground="#FFEFEFEF"         &lt;/span&gt;&lt;font color="#ff0000" style="BACKGROUND-COLOR:#ffcccc"&gt;Text="Click         Me" &lt;/font&gt;&lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;/&amp;gt;&lt;/span&gt;&lt;br/&gt;             &amp;lt;Rectangle StrokeThickness="4" RadiusX="16"         RadiusY="36" Width="104" Height="32" Canvas.Left="8"         Canvas.Top="1.3"&amp;gt;&lt;br/&gt;               &amp;lt;Rectangle.Fill&amp;gt;&lt;br/&gt;                 &amp;lt;LinearGradientBrush         EndPoint="0.5,-0.409" StartPoint="0.5,1.409"&amp;gt;&lt;br/&gt;                   &amp;lt;GradientStop         Color="#00FFFFFF" Offset="0.13"/&amp;gt;&lt;br/&gt;                   &amp;lt;GradientStop         Color="#FFFFFFFF" Offset="1"/&amp;gt;&lt;br/&gt;                 &amp;lt;/LinearGradientBrush&amp;gt;&lt;br/&gt;               &amp;lt;/Rectangle.Fill&amp;gt;&lt;br/&gt;             &amp;lt;/Rectangle&amp;gt;&lt;br/&gt;             &amp;lt;Rectangle RadiusX="17" RadiusY="36" Width="114"         Height="38" Fill="#00FFFFFF" x:Name="highlightEllipse" Canvas.Left="3"         Canvas.Top="3"/&amp;gt;&lt;br/&gt;           &amp;lt;/Canvas&amp;gt;&lt;br/&gt;         &amp;lt;/Canvas&amp;gt;&lt;br/&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr bgcolor="#ffff99" style="FONT-WEIGHT:bold"&gt;       &lt;td width="100%"&gt;         Scense.xaml.js -- XAML 事件處理&lt;br/&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         if (!window.SilverlightJSApplication1)&lt;br/&gt;             window.SilverlightJSApplication1 = {};&lt;br/&gt;         &lt;br/&gt;         SilverlightJSApplication1.Scene = function()&lt;br/&gt;         {&lt;br/&gt;         }&lt;br/&gt;         &lt;br/&gt;         SilverlightJSApplication1.Scene.prototype =&lt;br/&gt;         {&lt;br/&gt;         &lt;font color="#009900"&gt;    /**&lt;br/&gt;              * Sliverlight 事件載入完成的事件處理函式&lt;br/&gt;              *&lt;br/&gt;              * @param   control&lt;br/&gt;              * @param   userContext&lt;br/&gt;              * @param   rootElement &lt;br/&gt;              */&lt;/font&gt;&lt;br/&gt;             handleLoad: function(control, userContext,         rootElement)&lt;br/&gt;             {&lt;br/&gt;                 this.control = control;&lt;br/&gt;                &lt;br/&gt;                 // Sample button event hookup:         Find the button and then attach event handlers&lt;br/&gt;                 this.button =         rootElement.children.getItem(0);   &lt;br/&gt;         &lt;br/&gt;                 // 建立事件處理&lt;br/&gt;                         this.button.addEventListener("MouseEnter",         Sys.Silverlight.createDelegate(this, this.handleMouseEnter));&lt;br/&gt;                         this.button.addEventListener("MouseLeftButtonDown",         Sys.Silverlight.createDelegate(this, this.handleMouseDown));&lt;br/&gt;                         this.button.addEventListener("MouseLeftButtonUp",         Sys.Silverlight.createDelegate(this, this.handleMouseUp));&lt;br/&gt;                         this.button.addEventListener("MouseLeave",         Sys.Silverlight.createDelegate(this, this.handleMouseLeave));&lt;br/&gt;             },&lt;br/&gt;            &lt;br/&gt;         &lt;font color="#009900"&gt;    /**&lt;br/&gt;              * 處理 Mouse Enter 事件&lt;br/&gt;              *&lt;br/&gt;              * @param sender&lt;br/&gt;              * @param eventArgs&lt;br/&gt;              */&lt;/font&gt;&lt;br/&gt;             handleMouseEnter: function(sender, eventArgs)&lt;br/&gt;             {&lt;br/&gt;                 var mouseEnterAnimation =         sender.findName("mouseEnter");&lt;br/&gt;                 mouseEnterAnimation.begin();&lt;br/&gt;             },&lt;br/&gt;         &lt;br/&gt;         &lt;font color="#009900"&gt;    /**&lt;br/&gt;              * 處理 Mouse Down 事件&lt;br/&gt;              *&lt;br/&gt;              * @param sender&lt;br/&gt;              * @param eventArgs&lt;br/&gt;              */    &lt;/font&gt;&lt;br/&gt;             handleMouseDown: function(sender, eventArgs)&lt;br/&gt;             {&lt;br/&gt;                 var mouseDownAnimation =         sender.findName("mouseDown");&lt;br/&gt;                 mouseDownAnimation.begin();&lt;br/&gt;             },&lt;br/&gt;            &lt;br/&gt;         &lt;font color="#009900"&gt;    /**&lt;br/&gt;              * 處理 Mouse Up 事件&lt;br/&gt;              *&lt;br/&gt;              * @param sender&lt;br/&gt;              * @param eventArgs&lt;br/&gt;              */  &lt;/font&gt; &lt;br/&gt;             handleMouseUp: function(sender, eventArgs)&lt;br/&gt;             {&lt;br/&gt;                 var mouseUpAnimation =         sender.findName("mouseUp");&lt;br/&gt;                 mouseUpAnimation.begin();&lt;br/&gt;                &lt;br/&gt;                 // Put clicked logic here&lt;br/&gt;                 alert("clicked");&lt;br/&gt;             },&lt;br/&gt;            &lt;br/&gt;         &lt;font color="#009900"&gt;    /**&lt;br/&gt;              * 處理 Mouse Leave 事件&lt;br/&gt;              *&lt;br/&gt;              * @param sender&lt;br/&gt;              * @param eventArgs&lt;br/&gt;              */    &lt;/font&gt;&lt;br/&gt;             handleMouseLeave: function(sender, eventArgs)&lt;br/&gt;             {&lt;br/&gt;                 var mouseLeaveAnimation =         sender.findName("mouseLeave");&lt;br/&gt;                 mouseLeaveAnimation.begin();&lt;br/&gt;             }&lt;br/&gt;         }&lt;br/&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr bgcolor="#ffff99" style="FONT-WEIGHT:bold"&gt;       &lt;td width="100%"&gt;         Sliverlight.js -- Sliverlight 核心&lt;br/&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;       &lt;td width="100%"&gt;         &lt;font color="#009900"&gt;/**&lt;br/&gt;          *  Silverlight.js   version 0.9&lt;br/&gt;          *&lt;br/&gt;          *  This file is provided by Microsoft as a helper file for         websites that&lt;br/&gt;          *  incorporate Silverlight Objects.  It must be used in         conjunction with createSilverlight.js,&lt;br/&gt;          *  or alternatively, a custom .js file specific to your         site.  The 0.9 version of this file is&lt;br/&gt;          *  hard coded to match Microsoft Silverlight v1.0 Beta, which         exposes 0.9 as its version number.   &lt;br/&gt;          *  This file is provided as is.&lt;br/&gt;          *&lt;br/&gt;          */&lt;/font&gt;&lt;br/&gt;         if (!window.Sys)&lt;br/&gt;         {&lt;br/&gt;            window.Sys = { };&lt;br/&gt;         }&lt;br/&gt;         if (!window.Sys.Silverlight)&lt;br/&gt;         {&lt;br/&gt;             window.Sys.Silverlight = { };&lt;br/&gt;         }&lt;br/&gt;         &lt;br/&gt;         &lt;font color="#009900"&gt;/**&lt;br/&gt;          * 檢查是否安裝符合指定的 Sliverlight 版本&lt;br/&gt;          *&lt;br/&gt;          * ＠param   version      版本&lt;br/&gt;          *         @return                          true=已安裝, false=未安裝&lt;br/&gt;          */&lt;/font&gt;&lt;br/&gt;         &lt;font color="#ff0000"&gt;Sys.Silverlight.isInstalled&lt;/font&gt; =         function(version)&lt;br/&gt;         {&lt;br/&gt;          &lt;br/&gt;             var uaString = navigator.userAgent;&lt;br/&gt;             var reqVersionArray = version.split(".");&lt;br/&gt;             reqMajorVer = (reqVersionArray[0] != null) ?         reqVersionArray[0] : 0;&lt;br/&gt;             reqMinorVer = (reqVersionArray[1] != null) ?         reqVersionArray[1] : 9;&lt;br/&gt;             reqBuildVer = (reqVersionArray[2] != null) ?         reqVersionArray[2] : 0;    &lt;br/&gt;            &lt;br/&gt;         &lt;font color="#009900"&gt;    /**&lt;br/&gt;              * 取得 Sliverlight 版本資訊&lt;br/&gt;              *&lt;br/&gt;              * @return 版本資訊&lt;br/&gt;              */&lt;/font&gt;&lt;br/&gt;             function detectAgControlVersion()&lt;br/&gt;             {&lt;br/&gt;                 agVersion =         -1;      &lt;br/&gt;         &lt;br/&gt;                 if ((navigator.plugins !=         null) &amp;amp;&amp;amp; (navigator.plugins.length &amp;gt; 0))&lt;br/&gt;                         {       &lt;br/&gt;                 if (document.getElementById         &amp;amp;&amp;amp; !document.all &amp;amp;&amp;amp; navigator.plugins["WPFe Plug-In"] )&lt;br/&gt;                 {&lt;br/&gt;                     if         (navigator.userAgent.indexOf("Firefox") != -1)&lt;br/&gt;                     {&lt;br/&gt;                                 // ??&lt;br/&gt;                                 var tmpAgObjectTag =         '&lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;&amp;lt;object         id="tmpSilverlightVersion" width="1" height="1"         type="application/ag-plugin"/&amp;gt;&lt;/span&gt;';&lt;br/&gt;                                 range = document.createRange();   &lt;br/&gt;                                 range.selectNode(document.body);                   &lt;br/&gt;                                 range.setStartBefore(document.body);&lt;br/&gt;                                 tmpAgControlDiv = document.createElement('DIV');&lt;br/&gt;                                 document.body.appendChild(tmpAgControlDiv);&lt;br/&gt;                                 tmpAgControlDiv.innerHTML=tmpAgObjectTag;&lt;br/&gt;                                         &lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;agVersionElement=document.getElementById("tmpSilverlightVersion");&lt;/span&gt;&lt;br/&gt;                                         &lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;agVersion=agVersionElement.settings.version;&lt;/span&gt;&lt;br/&gt;                                 document.body.removeChild(tmpAgControlDiv);&lt;br/&gt;                     }&lt;br/&gt;                     else&lt;br/&gt;                     {&lt;br/&gt;                                 &lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;agVersion =         navigator.plugins["WPFe Plug-In"].description&lt;/span&gt;;&lt;br/&gt;                     }&lt;br/&gt;                 }&lt;br/&gt;                 }&lt;br/&gt;                 else if         ((navigator.userAgent.indexOf('Windows') != -1) &amp;amp;&amp;amp;         (navigator.appVersion.indexOf('MSIE') != -1) )&lt;br/&gt;                 {&lt;br/&gt;                     try&lt;br/&gt;                     {&lt;br/&gt;                                 &lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;var AgControl = new         ActiveXObject("AgControl.AgControl");    &lt;/span&gt;       &lt;br/&gt;                                 &lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;agVersion =         AgControl.settings.version;  &lt;/span&gt;             &lt;br/&gt;                                 AgControl = null;&lt;br/&gt;                        &lt;br/&gt;                     }&lt;br/&gt;                     catch         (e)&lt;br/&gt;                     {&lt;br/&gt;                                 agVersion = -1;&lt;br/&gt;                     }&lt;br/&gt;                 }&lt;br/&gt;                 return agVersion;&lt;br/&gt;             }&lt;br/&gt;         &lt;br/&gt;             var versionStr = detectAgControlVersion();&lt;br/&gt;             if (versionStr == -1 )&lt;br/&gt;             {&lt;br/&gt;                 return false;&lt;br/&gt;             }&lt;br/&gt;             else if (versionStr != 0)&lt;br/&gt;             {&lt;br/&gt;                 versionArray =         versionStr.split(".");&lt;br/&gt;         &lt;br/&gt;                 var versionMajor =         versionArray[0];&lt;br/&gt;                 var versionMinor =         versionArray[1];&lt;br/&gt;                 var versionBuild =         versionArray[2];&lt;br/&gt;         &lt;br/&gt;                 if (versionMajor &amp;gt;         parseFloat(reqMajorVer))&lt;br/&gt;                 {&lt;br/&gt;                             return true;&lt;br/&gt;                 }&lt;br/&gt;                 else if (versionMajor ==         parseFloat(reqMajorVer))&lt;br/&gt;                 {&lt;br/&gt;                     if         (versionMinor &amp;gt; parseFloat(reqMinorVer))&lt;br/&gt;                     {&lt;br/&gt;                                 return true;&lt;br/&gt;                     }&lt;br/&gt;                     else         if (versionMinor == parseFloat(reqMinorVer))&lt;br/&gt;                     {&lt;br/&gt;                                 if (versionBuild &amp;gt;= parseFloat(reqBuildVer))&lt;br/&gt;                                 {&lt;br/&gt;                                     return true;&lt;br/&gt;                                 }&lt;br/&gt;                     }&lt;br/&gt;                 }&lt;br/&gt;                 return false;&lt;br/&gt;             }&lt;br/&gt;         }&lt;br/&gt;         &lt;br/&gt;         &lt;font color="#009900"&gt;/**&lt;br/&gt;          * Silverlight event instance counter for memory mgt&lt;br/&gt;          *&lt;br/&gt;          */&lt;/font&gt;&lt;br/&gt;         &lt;font color="#ff0000"&gt;Sys.Silverlight._counterL&lt;/font&gt; = 0;&lt;br/&gt;         &lt;br/&gt;         &lt;font color="#009900"&gt;/**&lt;br/&gt;          * 建立 Sliverlight&lt;br/&gt;          *&lt;br/&gt;          * @param   source                  xaml 檔案來源&lt;br/&gt;          * @param   id                        &amp;lt;object&amp;gt; 標籤的識別 id&lt;br/&gt;          * @param   properties              屬性集合，格式為 { name:value, name:value, name:value}&lt;br/&gt;          * @param           events          事件集合，格式為 {         name:value, name:value, name:value}&lt;br/&gt;          * @param   initParams              &amp;lt;param&amp;gt; 參數設定，格式為 { name:value, name:value, name:value}&lt;br/&gt;          * @param   userContext  &lt;br/&gt;          *         @return                               Plugin 字串&lt;br/&gt;          */&lt;/font&gt;&lt;br/&gt;         &lt;font color="#ff0000"&gt;Sys.Silverlight.createObject&lt;/font&gt; =         function(source, parentElement, id, properties, events, initParams,         userContext)&lt;br/&gt;         {&lt;br/&gt;                &lt;br/&gt;             var slPluginHelper = new Object();&lt;br/&gt;             var slProperties =         properties;       &lt;br/&gt;             var slEvents = events;&lt;br/&gt;             slPluginHelper.source = source;&lt;br/&gt;             slPluginHelper.parentElement = parentElement;&lt;br/&gt;             slPluginHelper.id =         id;        &lt;br/&gt;             slPluginHelper.width = slProperties.width;&lt;br/&gt;             slPluginHelper.height = slProperties.height;&lt;br/&gt;             slPluginHelper.background =         slProperties.background;       &lt;br/&gt;             slPluginHelper.isWindowless =         slProperties.isWindowless;&lt;br/&gt;             slPluginHelper.framerate = slProperties.framerate;&lt;br/&gt;             slPluginHelper.ignoreBrowserVer =         slProperties.ignoreBrowserVer;   &lt;br/&gt;             slPluginHelper.inplaceInstallPrompt =         slProperties.inplaceInstallPrompt;&lt;br/&gt;             slPluginHelper.enableHtmlAccess =         slProperties.enableHtmlAccess;&lt;br/&gt;             slPluginHelper.initParams =         initParams;       &lt;br/&gt;            &lt;br/&gt;             //memory management for onLoad         event     &lt;br/&gt;             if (slEvents.onLoad)&lt;br/&gt;             {&lt;br/&gt;                var uniqueID = '_sl' +         (Sys.Silverlight._counterL++);&lt;br/&gt;                slPluginHelper.loadedHandlerName =         'javascript:' + uniqueID; &lt;br/&gt;         &lt;br/&gt;                function _dispose()&lt;br/&gt;                {&lt;br/&gt;                 if (window.detachEvent)&lt;br/&gt;                 {&lt;br/&gt;                             window.detachEvent('onunload', _dispose);&lt;br/&gt;                 }&lt;br/&gt;                 else&lt;br/&gt;                 {&lt;br/&gt;                             window.removeEventListener('unload', _dispose, false);&lt;br/&gt;                 }&lt;br/&gt;                 window[uniqueID] = null;&lt;br/&gt;                }&lt;br/&gt;         &lt;br/&gt;                 function         _loadedHandler(sender)&lt;br/&gt;                 {&lt;br/&gt;                             slEvents.onLoad(document.getElementById(slPluginHelper.id), userContext,         sender);&lt;br/&gt;                             _dispose();&lt;br/&gt;                 }&lt;br/&gt;         &lt;br/&gt;                 window[uniqueID] =         _loadedHandler; &lt;br/&gt;                 if (window.attachEvent)&lt;br/&gt;                 {&lt;br/&gt;                             window.attachEvent('onunload', _dispose);&lt;br/&gt;                 }&lt;br/&gt;                 else&lt;br/&gt;                 {&lt;br/&gt;                             window.addEventListener('unload', _dispose, false);&lt;br/&gt;                 }&lt;br/&gt;             }&lt;br/&gt;             //set error handler&lt;br/&gt;             if (!slEvents.onError)&lt;br/&gt;             {&lt;br/&gt;                 slPluginHelper.onError =         "default_error_handler";&lt;br/&gt;             }&lt;br/&gt;             else&lt;br/&gt;             {&lt;br/&gt;                 slPluginHelper.onError =         slEvents.onError;&lt;br/&gt;                     }         &lt;br/&gt;            &lt;br/&gt;             var slPluginHTML = "";&lt;br/&gt;                &lt;br/&gt;             //direct download pointer&lt;br/&gt;             var directDownload;&lt;br/&gt;         &lt;br/&gt;             if (navigator.userAgent.indexOf('Windows') != -1)&lt;br/&gt;             {&lt;br/&gt;                         &lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;directDownload =         "http://go.microsoft.com/fwlink/?LinkID=86008";&lt;/span&gt;&lt;br/&gt;             }&lt;br/&gt;         &lt;br/&gt;             else if (navigator.userAgent.indexOf('PPC Mac OS X')         != -1)&lt;br/&gt;             {&lt;br/&gt;                         &lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;directDownload =         "http://go.microsoft.com/fwlink/?LinkID=87380";&lt;/span&gt;&lt;br/&gt;             }&lt;br/&gt;         &lt;br/&gt;             else if (navigator.userAgent.indexOf('Intel Mac OS         X') != -1)&lt;br/&gt;             {&lt;br/&gt;                         &lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;directDownload =         "http://go.microsoft.com/fwlink/?LinkID=87384"&lt;/span&gt;;&lt;br/&gt;             }&lt;br/&gt;             //point to correct image/landing page for Alpha         (0.95.x) and Beta (0.90.x)&lt;br/&gt;             var inDirectDownloadPage, inDirectDownloadImage;&lt;br/&gt;            &lt;br/&gt;             var curVer = slProperties.version.split(".");&lt;br/&gt;                 majorVer = curVer[0];&lt;br/&gt;                 minorVer = curVer[1];&lt;br/&gt;            &lt;br/&gt;             //if Alpha, disallow inPlaceInstall&lt;br/&gt;             if (minorVer == "95")&lt;br/&gt;             {&lt;br/&gt;                         slPluginHelper.inplaceInstallPrompt = false;&lt;br/&gt;                         &lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;inDirectDownloadPage =         "http://go.microsoft.com/fwlink/?LinkID=88363";&lt;/span&gt;&lt;br/&gt;                         &lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;inDirectDownloadImage =         "http://go.microsoft.com/fwlink/?LinkID=88365";&lt;/span&gt;&lt;br/&gt;             }&lt;br/&gt;             else&lt;br/&gt;             {&lt;br/&gt;                         &lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;inDirectDownloadPage =         "http://go.microsoft.com/fwlink/?LinkID=86009";&lt;/span&gt;&lt;br/&gt;                         &lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;inDirectDownloadImage =         "http://go.microsoft.com/fwlink/?LinkID=87023";&lt;/span&gt;   &lt;br/&gt;            &lt;br/&gt;             }&lt;br/&gt;          &lt;br/&gt;             // text for Silverlight image link, used for         non-inplaceInstallPrompt and unsupported browser&lt;br/&gt;            &lt;br/&gt;             var silverlightLink =         '&lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;&amp;lt;div style="width: 205px;         height: 67px; background-color: #FFFFFF"&amp;gt;&amp;lt;a         href="'+inDirectDownloadPage+'"&amp;gt;&amp;lt;img style="border:0";          src="'+inDirectDownloadImage+'"/&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;'&lt;br/&gt;             // detect supported browser version &amp;amp; that the         correct version of WPF/e is installed, else display install&lt;br/&gt;            &lt;br/&gt;             if (browserIsSupportedVersion(slPluginHelper))&lt;br/&gt;             {  &lt;br/&gt;              &lt;br/&gt;                 if         (Sys.Silverlight.isInstalled(slProperties.version))&lt;br/&gt;                 {&lt;br/&gt;                             slPluginHTML = buildHTML(slPluginHelper);&lt;br/&gt;                 }&lt;br/&gt;                 else if         (!slPluginHelper.inplaceInstallPrompt)&lt;br/&gt;                 {&lt;br/&gt;                             slPluginHTML = silverlightLink;&lt;br/&gt;                                &lt;br/&gt;                 }&lt;br/&gt;                 else          //inPlaceInstallPrompt&lt;br/&gt;                 {&lt;br/&gt;                             slPluginHTML += '&lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;&amp;lt;div         style="width: 205px; height: 101px background-color: #FFFFFF;"&amp;gt;&amp;lt;a         href="'+directDownload+'"&amp;gt;&amp;lt;img style="border:0";         SRC="http://go.microsoft.com/fwlink/?LinkID=87024"&amp;gt;&amp;lt;/a&amp;gt;&lt;/span&gt;';               &lt;br/&gt;                             slPluginHTML += '&lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;&amp;lt;div         style="margin-top: -60px;text-align: center;color: #FFFFFF; font-size:         10px;font-family: Arial "&amp;gt;By clicking &amp;lt;b&amp;gt;Get Microsoft         Silverlight&amp;lt;/b&amp;gt; you accept the &lt;/span&gt;';&lt;br/&gt;                             slPluginHTML += '&lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;&amp;lt;a         href="http://go.microsoft.com/fwlink/?LinkID=87025"         style="text-decoration: underline;color: #FFFFFF;"&amp;gt;Silverlight         license         agreement.&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;';               &lt;br/&gt;                             slPluginHTML += '&lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;&amp;lt;div         style="margin-top: 8px;text-align: center;color: #FFFFFF; font-family:         Arial; font-size: 10px;"&amp;gt;Silverlight updates automatically, &amp;lt;a         href="http://go.microsoft.com/fwlink/?LinkID=87026"         style="text-decoration: underline;color: #FFFFFF;"&amp;gt;learn         more.&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;';&lt;br/&gt;                            &lt;br/&gt;                 }&lt;br/&gt;             }&lt;br/&gt;             else&lt;br/&gt;             {&lt;br/&gt;                 slPluginHTML =         silverlightLink;&lt;br/&gt;            &lt;br/&gt;             }       &lt;br/&gt;             // insert the HTML into the requested host element or         return &amp;lt;object&amp;gt; tag.&lt;br/&gt;             if(parentElement != null)&lt;br/&gt;             {&lt;br/&gt;                 parentElement.innerHTML =         slPluginHTML;&lt;br/&gt;             }&lt;br/&gt;             else&lt;br/&gt;             {&lt;br/&gt;                 return slPluginHTML;&lt;br/&gt;             }&lt;br/&gt;                &lt;br/&gt;         }&lt;br/&gt;         &lt;br/&gt;         &lt;font color="#009900"&gt;/**&lt;br/&gt;          *  檢測瀏覽器是否支援 Sliverlight&lt;br/&gt;          *&lt;br/&gt;          * @param   slPluginHelper             &lt;/font&gt;&lt;font color="#009900"&gt;Plugin 參數&lt;/font&gt;&lt;br/&gt;         &lt;font color="#009900"&gt; *         @return                                 true=支援, false=不支援&lt;br/&gt;          */&lt;/font&gt;&lt;br/&gt;         function         &lt;font color="#ff0000"&gt;browserIsSupportedVersion&lt;/font&gt;(slPluginHelper)&lt;br/&gt;         {&lt;br/&gt;             var supportedBrowser = true;&lt;br/&gt;            &lt;br/&gt;             if (slPluginHelper.ignoreBrowserVer == true)&lt;br/&gt;             {&lt;br/&gt;                 return supportedBrowser;&lt;br/&gt;             }&lt;br/&gt;             else&lt;br/&gt;             {   &lt;br/&gt;                 var supportedBrowser =         false;         &lt;br/&gt;             }    &lt;br/&gt;            &lt;br/&gt;             // detection for Internet Explorer 6.0+, 32-bit only&lt;br/&gt;             if (navigator.userAgent.indexOf('MSIE') != -1)&lt;br/&gt;             {&lt;br/&gt;                 if         (navigator.userAgent.indexOf('Win64') == -1)&lt;br/&gt;                         {          &lt;br/&gt;                     var         tempVersion = navigator.userAgent.split("MSIE");&lt;br/&gt;                             browserMajorVersion = parseInt(tempVersion[1]);&lt;br/&gt;                                 if (browserMajorVersion &amp;gt;= 6.0)&lt;br/&gt;                                 {&lt;br/&gt;                                     supportedBrowser = true;&lt;br/&gt;                                 }&lt;br/&gt;                 }&lt;br/&gt;             }&lt;br/&gt;             // detection for Firefox 1.5+ and 2.0&lt;br/&gt;             else if (navigator.userAgent.indexOf("Firefox") !=         -1)&lt;br/&gt;             {&lt;br/&gt;                 var tempVersion =         navigator.userAgent.split("Firefox/");&lt;br/&gt;                 tempVersion =         tempVersion[1].split(".");&lt;br/&gt;                 browserMajorVersion =         parseFloat(tempVersion[0]);&lt;br/&gt;                 browserMinorVersion =         parseFloat(tempVersion[1]);&lt;br/&gt;         &lt;br/&gt;                 if (browserMajorVersion &amp;gt;=         2)&lt;br/&gt;                 {&lt;br/&gt;                             supportedBrowser = true;&lt;br/&gt;                 }&lt;br/&gt;                 else&lt;br/&gt;                 {&lt;br/&gt;                     if         ((browserMinorVersion &amp;gt;= 5))&lt;br/&gt;                     {&lt;br/&gt;                                 supportedBrowser = true;&lt;br/&gt;                     }&lt;br/&gt;                 }&lt;br/&gt;             }&lt;br/&gt;             else if (navigator.userAgent.indexOf("Safari") != -1)&lt;br/&gt;             {&lt;br/&gt;                 supportedBrowser = true;&lt;br/&gt;             }&lt;br/&gt;         &lt;br/&gt;             return supportedBrowser;&lt;br/&gt;         }&lt;br/&gt;         &lt;br/&gt;         &lt;font color="#009900"&gt;/**&lt;br/&gt;          *  建立控制像實體的 HTML&lt;br/&gt;          *&lt;br/&gt;          *  預設範例動態產生如下的 HTML&lt;br/&gt;          *  &amp;lt;OBJECT id="SilverlightControl"         type="application/ag-plugin" height="400" width="400"&amp;gt;&lt;br/&gt;          *      &amp;lt;PARAM value="Scene.xaml"         name="source" /&amp;gt;&lt;br/&gt;          *      &amp;lt;PARAM value="default_error_handler"         name="onError" /&amp;gt;&lt;br/&gt;          *      &amp;lt;PARAM value="javascript:_sl0"         name="onLoad" /&amp;gt;&lt;br/&gt;          *  &amp;lt;/OBJECT&amp;gt;&lt;br/&gt;          *&lt;br/&gt;          * @param   slPluginHelper     Plugin         參數&lt;br/&gt;          *         @return                                  HTML 字串&lt;br/&gt;          */&lt;/font&gt;&lt;br/&gt;         function &lt;font color="#ff0000"&gt;buildHTML&lt;/font&gt;(slPluginHelper)&lt;br/&gt;         {&lt;br/&gt;             var slPluginHTML =         '&lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;&amp;lt;object         type="application/ag-plugin" id="'+slPluginHelper.id+'"         width="'+slPluginHelper.width+'" height="'+slPluginHelper.height+'"         &amp;gt;'&lt;/span&gt;;&lt;br/&gt;         &lt;br/&gt;         &lt;br/&gt;             if (slPluginHelper.source != null)&lt;br/&gt;             {&lt;br/&gt;                 slPluginHTML += '         &lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;&amp;lt;param name="source"         value="'+slPluginHelper.source+'" /&amp;gt;&lt;/span&gt;';&lt;br/&gt;             }&lt;br/&gt;             if (slPluginHelper.framerate != null)&lt;br/&gt;             {&lt;br/&gt;                 slPluginHTML +=         '&lt;span style="BACKGROUND-COLOR:#ffcccc"&gt; &amp;lt;param name="maxFramerate"         value="'+slPluginHelper.framerate+'" /&amp;gt;&lt;/span&gt;';&lt;br/&gt;             }&lt;br/&gt;                    &lt;br/&gt;             slPluginHTML +=         '&lt;span style="BACKGROUND-COLOR:#ffcccc"&gt; &amp;lt;param name="onError"         value="'+slPluginHelper.onError+'"         /&amp;gt;&lt;/span&gt;';      &lt;br/&gt;            &lt;br/&gt;             if (slPluginHelper.background != null)&lt;br/&gt;             {&lt;br/&gt;                 slPluginHTML +=         '&lt;span style="BACKGROUND-COLOR:#ffcccc"&gt; &amp;lt;param name="background"         value="'+slPluginHelper.background+'" /&amp;gt;&lt;/span&gt;';&lt;br/&gt;             }&lt;br/&gt;             if (slPluginHelper.isWindowless != null)&lt;br/&gt;             {&lt;br/&gt;                 slPluginHTML +=         '&lt;span style="BACKGROUND-COLOR:#ffcccc"&gt; &amp;lt;param name="windowless"         value="'+slPluginHelper.isWindowless+'"         /&amp;gt;&lt;/span&gt;';       &lt;br/&gt;             }&lt;br/&gt;             if (slPluginHelper.initParams != null)&lt;br/&gt;             {&lt;br/&gt;                 slPluginHTML +=         '&lt;span style="BACKGROUND-COLOR:#ffcccc"&gt; &amp;lt;param name="initParams"         value="'+slPluginHelper.initParams+'"         /&amp;gt;&lt;/span&gt;';       &lt;br/&gt;             }&lt;br/&gt;             if (slPluginHelper.enableHtmlAccess != null)&lt;br/&gt;             {&lt;br/&gt;                 slPluginHTML +=         '&lt;span style="BACKGROUND-COLOR:#ffcccc"&gt; &amp;lt;param         name="enableHtmlAccess" value="'+slPluginHelper.enableHtmlAccess+'"         /&amp;gt;&lt;/span&gt;';       &lt;br/&gt;             }&lt;br/&gt;             if (slPluginHelper.loadedHandlerName != null)&lt;br/&gt;             {&lt;br/&gt;                 slPluginHTML +=         '&lt;span style="BACKGROUND-COLOR:#ffcccc"&gt; &amp;lt;param name="onLoad"         value="'+slPluginHelper.loadedHandlerName+'"         /&amp;gt;&lt;/span&gt;';       &lt;br/&gt;             }&lt;br/&gt;                &lt;br/&gt;             slPluginHTML +=         '&lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;&amp;lt;/object&amp;gt;&lt;/span&gt;';&lt;br/&gt;            &lt;br/&gt;             if (navigator.userAgent.indexOf("Safari") != -1)&lt;br/&gt;            {&lt;br/&gt;                 // disable Safari caching&lt;br/&gt;                 // for more information, see         http://developer.apple.com/internet/safari/faq.html#anchor5&lt;br/&gt;                 slPluginHTML +=         "&lt;span style="BACKGROUND-COLOR:#ffcccc"&gt;&amp;lt;iframe         style='visibility:hidden;height:0;width:0'/&amp;gt;&lt;/span&gt;";&lt;br/&gt;            }&lt;br/&gt;         &lt;br/&gt;             return slPluginHTML;&lt;br/&gt;         }&lt;br/&gt;         &lt;br/&gt;         &lt;font color="#009900"&gt;/**&lt;br/&gt;          *  預設錯誤處理函式&lt;br/&gt;          *&lt;br/&gt;          * @param   sender&lt;br/&gt;          * @param   args&lt;br/&gt;          */&lt;/font&gt;&lt;br/&gt;         function &lt;font color="#ff0000"&gt;default_error_handler&lt;/font&gt;(sender,         args)&lt;br/&gt;         {&lt;br/&gt;             var iErrorCode;&lt;br/&gt;             var errorType = args.ErrorType;&lt;br/&gt;         &lt;br/&gt;             iErrorCode = args.ErrorCode;&lt;br/&gt;         &lt;br/&gt;             var errMsg = "nSilverlight error         message     n" ;&lt;br/&gt;         &lt;br/&gt;             errMsg += "ErrorCode: "+ iErrorCode + "n";&lt;br/&gt;         &lt;br/&gt;         &lt;br/&gt;             errMsg += "ErrorType: " + errorType +         "       n";&lt;br/&gt;             errMsg += "Message: " + args.ErrorMessage +         "     n";&lt;br/&gt;         &lt;br/&gt;             if (errorType == "ParserError")&lt;br/&gt;             {&lt;br/&gt;                 errMsg += "XamlFile: " +         args.xamlFile + "     n";&lt;br/&gt;                 errMsg += "Line: " +         args.lineNumber + "     n";&lt;br/&gt;                 errMsg += "Position: " +         args.charPosition + "     n";&lt;br/&gt;             }&lt;br/&gt;             else if (errorType == "RuntimeError")&lt;br/&gt;                     {          &lt;br/&gt;                 if (args.lineNumber != 0)&lt;br/&gt;                 {&lt;br/&gt;                             errMsg += "Line: " + args.lineNumber + "     n";&lt;br/&gt;                             errMsg += "Position: " +  args.charPosition +         "     n";&lt;br/&gt;                 }&lt;br/&gt;                 errMsg += "MethodName: " +         args.methodName + "     n";&lt;br/&gt;             }&lt;br/&gt;         &lt;br/&gt;             alert(errMsg);&lt;br/&gt;         }&lt;br/&gt;         &lt;br/&gt;         &lt;font color="#009900"&gt;/**&lt;br/&gt;          * createObjectEx, takes a single parameter of all createObject         parameters enclosed in {}      &lt;br/&gt;          *&lt;br/&gt;          * @param   params&lt;br/&gt;          * @return&lt;br/&gt;          */&lt;/font&gt;&lt;br/&gt;         &lt;font color="#ff0000"&gt;Sys.Silverlight.createObjectEx &lt;/font&gt;=         function(params)&lt;br/&gt;         {       &lt;br/&gt;             var parameters = params;&lt;br/&gt;             var html =         Sys.Silverlight.createObject(parameters.source,         parameters.parentElement, parameters.id, parameters.properties,         parameters.events, parameters.initParams, parameters.context);&lt;br/&gt;             if (parameters.parentElement == null)&lt;br/&gt;             {&lt;br/&gt;                 return html;&lt;br/&gt;             }&lt;br/&gt;         &lt;br/&gt;         } &lt;br/&gt;       &lt;/td&gt;     &lt;/tr&gt;     &lt;/tbody&gt;   &lt;/table&gt; &lt;/div&gt; &lt;br/&gt; &lt;span style="FONT-WEIGHT:bold"&gt;執行結果&lt;/span&gt;&lt;br/&gt; [Firefox 2.0.0.5]&lt;br/&gt; &lt;div style="PADDING:1em 0pt; TEXT-ALIGN:left"&gt;   &lt;img src="http://docs.google.com/File?id=dcxw59mr_1616db2mgjh2"/&gt; &lt;/div&gt; &lt;br/&gt; [IE 6]&lt;br/&gt; &lt;div style="PADDING:1em 0pt; TEXT-ALIGN:left"&gt;   &lt;img src="http://docs.google.com/File?id=dcxw59mr_1617hfsrmbch"/&gt; &lt;/div&gt; &lt;br/&gt; &lt;span style="FONT-WEIGHT:bold"&gt;&lt;/span&gt;&lt;span style="FONT-WEIGHT:bold"&gt;補充&lt;/span&gt;&lt;br/&gt; 1. Sliverlight 元件的 ProgID 為 AgControl.AgControl，元件檔案位於 C:Program FilesMicrosoft Silverlightnpctrl.dll，CLASS_ID 為 {32C73088-76AE-40F7-AC40-81F62CB2C1DA}&lt;br/&gt; &lt;br/&gt; &lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-8704815722493772403?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/8704815722493772403/comments/default" title="張貼意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/8704815722493772403?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/8704815722493772403?v=2" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CUICSXY9fSp7ImA9WB5WEks.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-4343557463610101776</id><published>2007-07-24T00:52:00.000-07:00</published><updated>2007-07-24T00:52:48.865-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-07-24T00:52:48.865-07:00</app:edited><title /><content type="html">&lt;div style="text-align: center;"&gt;&lt;font size="4"&gt;&lt;span style="font-weight: bold;"&gt;解決『無法為 Script "XXX.JS"找到Script引擎 "JScript"』錯誤&lt;/span&gt;&lt;/font&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;a href="http://chuiwenchiu.spaces.live.com/" title="MSN Space"&gt;&lt;u&gt;&lt;font color="#800080"&gt;MSN Space&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;、&lt;a href="http://docs.google.com/Doc?idhttp://docs.google.com/Doc?id=dcxw59mr_1610d2mjh2" title="Google Doc"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;Google Doc&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; 、&lt;a href="http://chuiwenchiu-arick.blogspot.com/" title="Google Blog"&gt;&lt;u&gt;&lt;font color="#800080"&gt;Google Blog&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;br&gt;Chui-Wen Chiu&lt;br&gt;2007.07.24&lt;br&gt;&lt;br&gt;你是否執行*.vbs 或 *.js 時會出現如下的錯誤訊息呢？&lt;br&gt;&lt;br&gt;&lt;div style="padding: 1em 0pt; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dcxw59mr_1611dtm5c4cp"&gt;&lt;/div&gt;&lt;img src="http://docs.google.com/File?id=dcxw59mr_1612n2kpxbfg"&gt;&lt;br&gt;&lt;br&gt;要解決這個問題，首先檢查 c:windowssystem32wscript.exe 是否存在，如果不存在，請到 Mcirosoft 安裝 WSH。如果存在，請在"開始 | 執行"地方輸入&lt;br&gt;&lt;font style="font-weight: bold;" color="#ff0000"&gt;regsvr32 VBScript&lt;/font&gt;&lt;br&gt;&lt;br&gt;完成 VBScript 元件註冊。再執行 &lt;br&gt;&lt;font color="#ff0000"&gt;&lt;span style="font-weight: bold;"&gt;regsvr32 JScript &lt;/span&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;完成 JScript 元件註冊。透過上述元件註冊應該可以修正問題。&lt;br&gt;&lt;br&gt;&lt;span style="font-weight: bold;"&gt;參考資料&lt;/span&gt;&lt;br&gt;[1] &lt;a title="Can't find script engine VBScript" href="http://support.genopro.com/Topic7010-60-1.aspx"&gt;Can't find script engine VBScript&lt;/a&gt; &lt;a&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-4343557463610101776?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/4343557463610101776/comments/default" title="張貼意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/4343557463610101776?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/4343557463610101776?v=2" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D0cFQnszcCp7ImA9WB5XFkg.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-2985177842159945405</id><published>2007-07-16T23:50:00.000-07:00</published><updated>2007-07-16T23:50:13.588-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-07-16T23:50:13.588-07:00</app:edited><title /><content type="html">&lt;div style="text-align: center;"&gt;   &lt;font style="font-weight: bold;" size="4"&gt;透過 URL 另存 Google Doc 和 Spreadsheet 檔案&lt;/font&gt;&lt;br&gt; &lt;/div&gt; &lt;a href="http://chuiwenchiu.spaces.live.com/" title="MSN Space"&gt;&lt;u&gt;&lt;font color="#800080"&gt;MSN Space&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;、&lt;a href="http://docs.google.com/Doc?id=dcxw59mr_1601czrsfc" title="Google Doc"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;Google Doc&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; 、&lt;a href="http://chuiwenchiu-arick.blogspot.com/" title="Google Blog"&gt;&lt;u&gt;&lt;font color="#800080"&gt;Google Blog&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;br&gt; Chui-Wen Chiu&lt;br&gt; 2007.07.17&lt;br&gt; &lt;br&gt; &lt;ul&gt;   &lt;li style="font-weight: bold;"&gt;     Google Doc   &lt;/li&gt;   &lt;ol&gt;     &lt;li&gt;       取得 Doc Id     &lt;/li&gt;     &lt;ul&gt;       &lt;li&gt;         http://docs.google.com/Doc?id=&lt;font color="#ff0000"&gt;dcxw59mr_1601czrsfc&lt;/font&gt;       &lt;/li&gt;       &lt;li&gt;         &lt;font color="#ff0000"&gt;&lt;font color="#000000"&gt;http://docs.google.com/Doc?docid=&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000"&gt;dcxw59mr_1601czrsfc&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;font color="#000000"&gt;http://docs.google.com/View?docid=&lt;/font&gt;[ID]&lt;/span&gt;&lt;font color="#ff0000"&gt;&lt;/font&gt;&lt;/li&gt;     &lt;/ul&gt;     &lt;li&gt;       &lt;font color="#ff0000"&gt;&lt;font color="#000000"&gt;套用 SaveAs 的 URL 服務&lt;/font&gt;&lt;/font&gt;     &lt;/li&gt;     &lt;ul&gt;       &lt;li&gt;         http://docs.google.com/MiscCommands?command=saveasdoc&amp;amp;exportformat=&lt;font color="#ff0000"&gt;[FORMAT]&lt;/font&gt;&amp;amp;docID=&lt;font color="#ff0000"&gt;[ID]&lt;/font&gt;       &lt;/li&gt;       &lt;ul&gt;         &lt;li&gt;           &lt;span style="color: rgb(51, 154, 0);"&gt;&lt;font color="#000000"&gt;[FORMAT] 可設定為 pdf, doc, oo(OpenOffice 文件), rtf, txt&lt;/font&gt;&lt;/span&gt;         &lt;/li&gt;         &lt;li&gt;           &lt;span style="color: rgb(51, 154, 0);"&gt;&lt;font color="#000000"&gt;[ID] 為 Doc Id，由步驟1取得&lt;/font&gt;&lt;/span&gt;         &lt;/li&gt;       &lt;/ul&gt;     &lt;/ul&gt;     &lt;ul&gt;       &lt;li&gt;         &lt;span style="color: rgb(51, 154, 0);"&gt;&lt;font color="#000000"&gt;範例&lt;/font&gt;&lt;/span&gt;       &lt;/li&gt;       &lt;ul&gt;         &lt;li&gt;           &lt;a href="http://docs.google.com/MiscCommands?command=saveasdoc&amp;amp;exportformat=pdf&amp;amp;docID=dcxw59mr_1601czrsfc"&gt;http://docs.google.com/MiscCommands?command=saveasdoc&amp;amp;exportformat=pdf&amp;amp;docID=dcxw59mr_1601czrsfc&lt;/a&gt; &lt;span style="color: rgb(51, 154, 0);"&gt;&lt;font color="#000000"&gt;&lt;font color="#ff0000"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;         &lt;/li&gt;       &lt;/ul&gt;     &lt;/ul&gt;   &lt;/ol&gt; &lt;/ul&gt; &lt;br&gt; &lt;ul&gt;   &lt;li&gt;     Google Spreadheet   &lt;/li&gt;   &lt;ol&gt;&lt;li&gt;       取得 ID&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;font color="#000000"&gt;http://spreadsheets.google.com/pub?key=&lt;/font&gt;[ID]&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;套用 Export 服務&lt;/li&gt;&lt;/ol&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: rgb(51, 154, 0);"&gt;&lt;font color="#000000"&gt;http://spreadsheets.google.com/pub?key=&lt;/font&gt;&lt;font color="#ff0000"&gt;[ID]&lt;/font&gt;&lt;font color="#000000"&gt;&amp;amp;output=&lt;/font&gt;&lt;font color="#ff0000"&gt;[FORMAT]&lt;/font&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;[FORMAT] 可設定為 pdf, ods (for OpenOffice spreadsheets), csv, txt&lt;/li&gt;&lt;li&gt;[ID] 步驟1 取得&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt; &lt;/ul&gt;&lt;br&gt; &lt;span style="font-weight: bold;"&gt;參考資料&lt;/span&gt;&lt;br&gt; [1] &lt;a href="http://googlesystem.blogspot.com/2007/07/download-published-documents-and.html" title="Download Published Documents and Spreadsheets"&gt;Download Published Documents and Spreadsheets&lt;/a&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-2985177842159945405?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/2985177842159945405/comments/default" title="張貼意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/2985177842159945405?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/2985177842159945405?v=2" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CUYEQnc-cSp7ImA9WB5QGUU.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-8695303345646853256</id><published>2007-07-09T05:11:00.000-07:00</published><updated>2007-07-09T05:11:43.959-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-07-09T05:11:43.959-07:00</app:edited><title /><content type="html">&lt;div style="text-align: center;"&gt;   &lt;font size="4"&gt;&lt;span style="font-weight: bold;"&gt; 設計問題：如何彈性動態生成各種物件&lt;/span&gt;&lt;/font&gt;&lt;br&gt; &lt;/div&gt; &lt;span&gt;&lt;a href="http://chuiwenchiu.spaces.live.com/"&gt;&lt;u&gt;MSN Space&lt;/u&gt;&lt;/a&gt;、&lt;a href="http://docs.google.com/Doc?docid=dcxw59mr_1569fhdd6d" title="Google Doc"&gt;&lt;u&gt;Google Doc&lt;/u&gt;&lt;/a&gt; 、&lt;a href="http://chuiwenchiu-arick.blogspot.com/"&gt;&lt;u&gt;Google Blog&lt;/u&gt;&lt;/a&gt;&lt;/span&gt;&lt;br&gt; Chui-Wen Chiu&lt;br&gt; 2007.07.09&lt;br&gt; &lt;br&gt; &lt;span style="font-weight: bold;"&gt;問題描述：&lt;/span&gt;&lt;br&gt; 最近需要改寫一個繪圖系統，這個繪圖系統實作了 Serialize 和 Unserialize，Serialize 將圖形以 XML 方式儲存在檔案。Unserialize 反向運作產生對應圖形。Unserialize 由於使用 if ... else ... 方式還原對應圖形，且每一個圖形的建構參數不一定相同。原始的作法是&lt;br&gt; &lt;br&gt; // ... xml 解析&lt;br&gt; IShape* obj = NULL;&lt;br&gt; if ( id == ID_LABEL){&lt;br&gt;      obj = new CLabel("abc", 12);&lt;br&gt;     // obj do something&lt;br&gt; }else if (id == ID_LINE){&lt;br&gt;     obj = new CText("abc", 12, true);&lt;br&gt;     // obj do something&lt;br&gt; }else if (id == ID_RECT){&lt;br&gt;     obj = new CRECT(0, 0, 100, 150, COLOR_RED);&lt;br&gt;     // obj do something&lt;br&gt; }else ....&lt;br&gt; &lt;br&gt; }&lt;br&gt; &lt;br&gt; if (obj != NULL){&lt;br&gt;     AddCanvas(obj);&lt;br&gt; }&lt;br&gt; &lt;br&gt; 如果我要新增一個圖形，不只要實作類別，還要維護這一大串 if ... else ... 實在不太方便。有什麼好的設計可以修正這個問題？&lt;br&gt; &lt;br&gt; &lt;span style="font-weight: bold;"&gt;解決方式：&lt;/span&gt;&lt;br&gt; 這個問題我已經從 Andrei Alexandrescu "Mordern C++ Design" 獲得一個不錯解法，這個解法就是透過 ObjectFactory ，顧名思義就是產生 Object 的工廠，問題是每一種物件的產生方式皆不相同，那 ObjectFactory 要如何產生呢？關於這個問題解法就是透過一個簡單的註冊機制，每一個類別要能夠透過 ObjectFactory 產生對應物件，並需先在將 Factory Method 註冊在 Object Factory，如此就解決物件生成問題，這個部份的程式碼片段類似&lt;br&gt; &lt;br&gt; &lt;font style="font-weight: bold;" color="#009900"&gt;// MyObjectFactory.h&lt;/font&gt;&lt;br&gt; typedef IShape* (FactoryMethod*)(void*);&lt;br&gt; class &lt;font color="#ff0000"&gt;&lt;span style="font-weight: bold;"&gt;MyObjectFactory&lt;/span&gt;&lt;/font&gt;{&lt;br&gt; public:&lt;br&gt;   &lt;font color="#ff0000"&gt;bool Register(std::string id,  FactoryMethod func){&lt;/font&gt;&lt;br&gt;      m_func[id] = func;&lt;br&gt;   }&lt;br&gt; &lt;br&gt;   &lt;font color="#ff0000"&gt;IShape* Create(std::string id, void* param){ &lt;/font&gt;&lt;br&gt;      if (m_func.find(id) != m_func.end()){&lt;br&gt;         return m_func[id]( param );&lt;br&gt;      }&lt;br&gt; &lt;br&gt;      return NULL;&lt;br&gt;   }&lt;br&gt; private:&lt;br&gt;   std::map&amp;lt;std::string, FactoryMethod&amp;gt; m_func;&lt;br&gt; };&lt;br&gt; &lt;br&gt; // 實作簡單的 Singleton&lt;br&gt; static &lt;font color="#000000"&gt;MyObjectFactory&lt;/font&gt;&lt;font style="font-weight: bold;" color="#000000"&gt; &lt;/font&gt;g_ofactory;&lt;br&gt; &lt;br&gt; 有了上述的 ObjectFactory 就可以改寫原來的程式為如下：&lt;br&gt; &lt;font color="#ff0000"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/font&gt;IShape* obj;&lt;br&gt; // ... 產生 Factory Method 必要 param&lt;br&gt; obj = g_ofactory.Create(id, ....);&lt;br&gt; if (obj != NULL){&lt;br&gt;     AddCanvas(obj);&lt;br&gt; }&lt;br&gt; &lt;br&gt; 上述解法看似美好，可是還有一個問題，新增的類別何時且在哪註冊呢？這個問題 Andrei 也有提到，只需要在每一個類別所屬的檔案中加入如下的程式碼即可：&lt;br&gt; &lt;br&gt; // CLine.h&lt;br&gt; #include &amp;lt;MyObjectFactory.h&amp;gt;&lt;br&gt; class CLine: public IShape{&lt;br&gt; public:&lt;br&gt;     static IShape* Create(void* param){&lt;br&gt;        // ...&lt;br&gt;        return new CLine(...);&lt;br&gt;     }&lt;br&gt; };&lt;br&gt; const std::string id_line = "line";&lt;br&gt; namespace LineNS{&lt;br&gt;   &lt;font color="#ff0000"&gt;bool r = g_ofactory.Register(id_line, CLine::Create);&lt;/font&gt;&lt;br&gt; }&lt;br&gt; &lt;br&gt; // CRect.h&lt;br&gt; #include &amp;lt;MyObjectFactory.h&amp;gt;&lt;br&gt; class CRect: public IShape{&lt;br&gt; public:&lt;br&gt;     static IShape* Create(void* param){&lt;br&gt;        // ...&lt;br&gt;        return new CRect(...);&lt;br&gt;     }&lt;br&gt; };&lt;br&gt; const std::string id_rect = "rect";&lt;br&gt; namespace RectNS{&lt;br&gt;   &lt;font color="#ff0000"&gt;bool r = g_ofactory.Register(id_rect, CRect::Create);&lt;/font&gt;&lt;br&gt; }&lt;br&gt; &lt;br&gt; 經由上述的說明，這個重構後的系統，未來如果要擴充新的 Shape 或移除舊的 Shape，只需要引入/移除 Header 檔，是不是簡單多了呢？ ^^&lt;br&gt; 更多實作的細節可以參考[1] 所實作的 Loki Library。&lt;br&gt; &lt;br&gt; &lt;span style="font-weight: bold;"&gt;參考資料&lt;/span&gt;&lt;br&gt; [1] Andrei Alexandrescu, "Mordern C++ Design"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-8695303345646853256?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/8695303345646853256/comments/default" title="張貼意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/8695303345646853256?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/8695303345646853256?v=2" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CEYERHo4eip7ImA9WB5QGUo.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-1234779810451744761</id><published>2007-07-09T02:08:00.000-07:00</published><updated>2007-07-09T02:08:25.432-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-07-09T02:08:25.432-07:00</app:edited><title /><content type="html">&lt;div style="text-align: center;"&gt;&lt;font style="font-weight: bold;" size="4"&gt;boost::assign 的 list_of(), map_list_of() 初始化陣列&lt;/font&gt;&lt;br&gt;&lt;/div&gt;&lt;a href="http://chuiwenchiu.spaces.live.com/" title="MSN Space"&gt;&lt;u&gt;&lt;font color="#800080"&gt;MSN Space&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;、&lt;a href="http://docs.google.com/Doc?id=dcxw59mr_1571fcq4mz" title="Google Doc"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;Google Doc&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; 、&lt;a href="http://chuiwenchiu-arick.blogspot.com/" title="Google Blog"&gt;&lt;u&gt;&lt;font color="#800080"&gt;Google Blog&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;br&gt;Chui-Wen Chiu&lt;br&gt;2007.07.09&lt;br&gt;&lt;br&gt;&lt;span style="font-weight: bold;"&gt;測試環境&lt;/span&gt;&lt;br&gt;1. Windows XP Pro SP2&lt;br&gt;2. Visual Studio 2005&lt;br&gt;3. Boost Library 1.35&lt;br&gt;&lt;br&gt;list_of() 是用來初始化容器，透過這個函數可以建立匿名串列並轉換成任意容器型別。對於 map 容器則可以使用 map_list_of() 函數。以下事一個簡單的測試範例：&lt;br&gt;&lt;div&gt;&lt;table bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="100%"&gt;#include "stdafx.h"&lt;br&gt;&lt;font color="#ff0000"&gt;#include &amp;lt;boost/assign/list_of.hpp&amp;gt;&lt;/font&gt;&lt;br&gt;#include &amp;lt;boost/array.hpp&amp;gt;&lt;br&gt;#include &amp;lt;iostream&amp;gt;&lt;br&gt;#include &amp;lt;algorithm&amp;gt;&lt;br&gt;#include &amp;lt;vector&amp;gt;&lt;br&gt;#include &amp;lt;map&amp;gt;&lt;br&gt;&lt;br&gt;using namespace std;&lt;br&gt;&lt;font color="#ff0000"&gt;using namespace boost;&lt;br&gt;using namespace boost::assign;&lt;/font&gt;&lt;br&gt;&lt;br&gt;struct Person{&lt;br&gt;    Person(string n): name(n){&lt;br&gt;    }&lt;br&gt;&lt;br&gt;    std::string name;&lt;br&gt;};&lt;br&gt;&lt;br&gt;template&amp;lt;typename T&amp;gt;&lt;br&gt;void print(T data){&lt;br&gt;    std::cout &amp;lt;&amp;lt; data &amp;lt;&amp;lt; "n";                &lt;br&gt;}&lt;br&gt;&lt;br&gt;template&amp;lt;&amp;gt;&lt;br&gt;void print( pair&amp;lt;int, const char*&amp;gt; data){&lt;br&gt;    std::cout &amp;lt;&amp;lt; data.first &amp;lt;&amp;lt; ": " &amp;lt;&amp;lt; data.second &amp;lt;&amp;lt; "n";                &lt;br&gt;}&lt;br&gt;&lt;br&gt;template&amp;lt;&amp;gt;&lt;br&gt;void print( Person data){&lt;br&gt;    std::cout &amp;lt;&amp;lt; "Person's Name: " &amp;lt;&amp;lt; data.name.c_str() &amp;lt;&amp;lt; "n";                &lt;br&gt;}&lt;br&gt;&lt;br&gt;int _tmain(int argc, _TCHAR* argv[]){        &lt;br&gt;    &lt;font color="#ff0000"&gt;array&amp;lt;int, 6&amp;gt; a = list_of(1)(2)(3)(4)(5)(6);&lt;/font&gt;&lt;br&gt;    for_each(a.begin(), a.end(), print&amp;lt;int&amp;gt;);&lt;br&gt;&lt;br&gt;    cout &amp;lt;&amp;lt; "list_of for arrayn";&lt;br&gt;    &lt;font color="#ff0000"&gt;array&amp;lt;const char*, 3&amp;gt; b= list_of("Arick")("Mavis")("Chui-Wen Chiu");&lt;/font&gt;&lt;br&gt;    for_each(b.begin(), b.end(), print&amp;lt;const char*&amp;gt;);&lt;br&gt;&lt;br&gt;    cout &amp;lt;&amp;lt; "list_of for vectorn";&lt;br&gt;    &lt;font color="#ff0000"&gt;vector&amp;lt;int&amp;gt; v = list_of(10)(20)(30);&lt;/font&gt;&lt;br&gt;    for_each(v.begin(), v.end(), print&amp;lt;int&amp;gt;);&lt;br&gt;&lt;br&gt;    &lt;font color="#ff0000"&gt;vector&amp;lt;Person&amp;gt; vp = list_of( Person("Arick") )(Person("Mavis"))( Person("Chui-Wen Chiu"));&lt;/font&gt;&lt;br&gt;    for_each(vp.begin(), vp.end(), print&amp;lt;Person&amp;gt;);&lt;br&gt;&lt;br&gt;    cout &amp;lt;&amp;lt; "map_list_of TESTn";&lt;br&gt;    &lt;font color="#ff0000"&gt;map&amp;lt;int, const char*&amp;gt; m = map_list_of(0, "Arick")(1, "Mavis")(2, "Chui-Wen Chiu");&lt;/font&gt;&lt;br&gt;    for_each(m.begin(), m.end(), print&amp;lt; pair&amp;lt;int, const char*&amp;gt; &amp;gt;);&lt;br&gt;&lt;br&gt;    return 0;&lt;br&gt;}&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br&gt;&lt;span style="font-weight: bold;"&gt;參考資料&lt;/span&gt;&lt;br&gt;[1] http://www.boost.org/libs/assign/doc/index.html#list_of&lt;br&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-1234779810451744761?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/1234779810451744761/comments/default" title="張貼意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/1234779810451744761?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/1234779810451744761?v=2" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;AkAFQ3YzcCp7ImA9WB5QFkw.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-6714412879347438516</id><published>2007-07-04T23:58:00.000-07:00</published><updated>2007-07-04T23:58:32.888-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-07-04T23:58:32.888-07:00</app:edited><title /><content type="html">&lt;div style="text-align: center;"&gt;   &lt;font size="4"&gt;&lt;span style="font-weight: bold;"&gt;(BCB) TScrollBox 元件如何處理滾輪事件&lt;/span&gt;&lt;/font&gt;&lt;br&gt; &lt;/div&gt;&lt;a href="http://chuiwenchiu.spaces.live.com/" title="MSN Space"&gt;&lt;u&gt;&lt;font color="#800080"&gt;MSN Space&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;、&lt;a href="http://docs.google.com/Doc?id=dcxw59mr_1550f6nm65" title="Google Doc"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;Google Doc&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; 、&lt;a href="http://chuiwenchiu-arick.blogspot.com/" title="Google Blog"&gt;&lt;u&gt;&lt;font color="#800080"&gt;Google Blog&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;br&gt;Chui-Wen Chiu&lt;br&gt; 2007.07.05&lt;br&gt; &lt;br&gt; &lt;span style="font-weight: bold;"&gt;測試環境：&lt;/span&gt;&lt;br&gt; 1. Windows XP Pro SP2&lt;br&gt; 2. Borland C++ Builder 6.0&lt;br&gt; &lt;br&gt; &lt;span style="font-weight: bold;"&gt;問題：&lt;/span&gt;&lt;br&gt; 當滑鼠位於 TScrollBox 上時，使用滾輪會自動捲動。&lt;br&gt; &lt;br&gt; &lt;span style="font-weight: bold;"&gt;解決：&lt;/span&gt;&lt;br&gt; 由於 TScrollBox 本身並沒有對 &lt;font size="-1"&gt;ONMOUSEWHEEL ONMOUSEWHEELDOWN ONMOUSEWHEELUP 等事件進行滾動處理，但是有支援 &lt;/font&gt;&lt;font size="-1"&gt;OnMouseWheel, OnMouseWheelDown OnMouseWheelUp 等事件，所以，可以手動在這些事件中新增滾動處理。如下程式片段：&lt;br&gt;&lt;/font&gt;&lt;div&gt;&lt;table bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="100%"&gt;void __fastcall TForm1::&lt;font style="font-weight: bold;" color="#ff0000"&gt;ScrollBox1MouseWheelDown&lt;/font&gt;(TObject *Sender,&lt;br&gt;      TShiftState Shift, TPoint &amp;amp;MousePos, bool &amp;amp;Handled)&lt;br&gt;{&lt;br&gt;    &lt;font color="#ff0000"&gt;++ScrollBox1-&amp;gt;VertScrollBar-&amp;gt;Position;&lt;/font&gt;&lt;br&gt;}&lt;br&gt;//---------------------------------------------------------------------------&lt;br&gt;&lt;br&gt;void __fastcall TForm1::&lt;font color="#ff0000"&gt;&lt;span style="font-weight: bold;"&gt;ScrollBox1MouseWheelUp&lt;/span&gt;&lt;/font&gt;(TObject *Sender,&lt;br&gt;      TShiftState Shift, TPoint &amp;amp;MousePos, bool &amp;amp;Handled)&lt;br&gt;{&lt;br&gt;    &lt;font color="#ff0000"&gt;--ScrollBox1-&amp;gt;VertScrollBar-&amp;gt;Position;&lt;/font&gt;&lt;br&gt;}&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br&gt;&lt;font size="-1"&gt;&lt;br&gt; &lt;/font&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-6714412879347438516?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/6714412879347438516/comments/default" title="張貼意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/6714412879347438516?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/6714412879347438516?v=2" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;CkcNQHwzeip7ImA9WB5QE0s.&quot;"><id>tag:blogger.com,1999:blog-5113208746101413080.post-7208376768957490977</id><published>2007-07-02T00:04:00.000-07:00</published><updated>2007-07-02T00:08:11.282-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-07-02T00:08:11.282-07:00</app:edited><title /><content type="html">    &lt;div style="text-align: center;"&gt;&lt;font size="4"&gt;&lt;span style="font-weight: bold;"&gt;網頁加上 Google 的 MP3 Player&lt;/span&gt;&lt;/font&gt;&lt;br&gt;&lt;/div&gt; &lt;a href="http://chuiwenchiu.spaces.live.com/" title="MSN Space"&gt;&lt;u&gt;&lt;font color="#800080"&gt;MSN Space&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;、&lt;a title="Google Doc"&gt;&lt;u&gt;&lt;font color="#0000ff"&gt;Google Doc&lt;/font&gt;&lt;/u&gt;&lt;/a&gt; 、&lt;a href="http://chuiwenchiu-arick.blogspot.com/" title="Google Blog"&gt;&lt;u&gt;&lt;font color="#800080"&gt;Google Blog&lt;/font&gt;&lt;/u&gt;&lt;/a&gt;&lt;br&gt;Chui-Wen Chiu&lt;br&gt;2007.07.02&lt;br&gt;&lt;br&gt;[1] 提供一種可將 Gmail 中的 mp3 player 加入到自己網頁中的法，研究一下發現，他無法在 IE 上正常 Work，不過他的方法我想事直接從 Gmail 從挖出來的，於是我也依循這條線索挖出完整的 Code，下面就是去除不必要屬性後的片段，藍色字你的 mp3 url。&lt;br&gt;&lt;div&gt;&lt;table bgcolor="#cccccc" border="1" cellpadding="3" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="100%"&gt;&amp;lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&amp;gt;&lt;br&gt;&amp;lt;html&amp;gt;&lt;br&gt;&amp;lt;head&amp;gt;&lt;br&gt;    &amp;lt;title&amp;gt; new document &amp;lt;/title&amp;gt;&lt;br&gt;    &amp;lt;meta http-equiv="Content-Type" content="text/html; charset=big5"/&amp;gt;&lt;br&gt;    &amp;lt;meta name="author" content="Chui-Wen Chiu"&amp;gt;&lt;br&gt;&amp;lt;/head&amp;gt;&lt;br&gt;&amp;lt;body&amp;gt;&lt;br&gt;&lt;font color="#ff0000"&gt;&amp;lt;object &lt;br&gt;    classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"&lt;br&gt;    codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0"&lt;br&gt;    height="27" width="320"&amp;gt;        &lt;br&gt;    &amp;lt;param name="FlashVars" value="audioUrl=&lt;font style="font-weight: bold;" color="#3333ff"&gt;http://sisimi.pchome.googlepages.com/test.mp3&lt;/font&gt;"/&amp;gt;&lt;br&gt;    &amp;lt;param name="movie" value="http://mail.google.com/mail/html/audio.swf"/&amp;gt;&lt;br&gt;    &amp;lt;param name="wmode" value="transparent" /&amp;gt;    &lt;br&gt;    &amp;lt;param name="quality" value="best" /&amp;gt;&lt;br&gt;&lt;br&gt;    &amp;lt;embed         &lt;br&gt;        type="application/x-shockwave-flash" &lt;br&gt;        wmode="transparent" &lt;br&gt;        src="http://mail.google.com/mail/html/audio.swf?audioUrl=&lt;font style="font-weight: bold;" color="#3333ff"&gt;http://sisimi.pchome.googlepages.com/test.mp3&lt;/font&gt;" &lt;br&gt;        quality="best"&lt;br&gt;        height="27" width="320"/&amp;gt;&lt;br&gt;&amp;lt;/object&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;lt;/body&amp;gt;&lt;br&gt;&amp;lt;/html&amp;gt;&lt;br&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br&gt;&lt;span style="font-weight: bold;"&gt;測試網頁&lt;/span&gt;&lt;br&gt;&lt;a target="_blank" title="http://sisimi.pchome.googlepages.com/gm.html" href="http://sisimi.pchome.googlepages.com/gm.html"&gt;http://sisimi.pchome.googlepages.com/gm.html&lt;/a&gt; &lt;br&gt;&lt;br&gt;&lt;span style="font-weight: bold;"&gt;測試結果(IE 和 Firefox 畫面一致)&lt;/span&gt;&lt;br&gt;&lt;div style="padding: 1em 0pt; text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=dcxw59mr_1529cbxbbjfq"&gt;&lt;/div&gt;&lt;span style="font-weight: bold;"&gt;補充&lt;br&gt;&lt;/span&gt;mp3 僅供測試用途，如危害你的權益煩請&lt;a title="告知" href="mailto:sisimi.pchome@gmail.com"&gt;告知&lt;/a&gt; 會立即移除。&lt;span style="font-weight: bold;"&gt;&lt;br&gt;&lt;br&gt;參考資料&lt;/span&gt;&lt;br&gt;[1] &lt;a href="http://googlesystem.blogspot.com/2007/07/listen-to-mp3-files-online-using.html"&gt;Listen to MP3 Files Online Using Google's Flash Player&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5113208746101413080-7208376768957490977?l=chuiwenchiu-arick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://chuiwenchiu-arick.blogspot.com/feeds/7208376768957490977/comments/default" title="張貼意見" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/7208376768957490977?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5113208746101413080/posts/default/7208376768957490977?v=2" /><author><name>Chui-Wen Chiu</name><uri>http://www.blogger.com/profile/11905955032988918895</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total></entry></feed>

