
ok ... 因為做 HappyWeb 這個 widget 吃了點苦頭, 另外也響應 ingram 的
實質化運動, 所以記下我的心得供也有興趣做 widget 的人做參考..

一開始我的目標是擺在做出像是
flickr badge 般的 widget, 但是可以供大家瀏覽與參加 HappyWeb 網聚, 主要的功能有:
- 一定要有 "動" 的感覺, 也就是希望使用者可以有那種咻咻畫面跑來跑去的感覺, 然後能 "哇~~" 一下..
- 可以讓使用者把 widget 搬回家 (blog) 安裝使用..
- 除了資料展現, 可以有更多與使用者互動的功能. 如報名, 填寫資料. 基本上是希望使用者可以在上面直接操作了, 不需要再多開網頁..
- 可以記住使用者的登入資訊, 也就是說, 一個登入過的使用者可以到其他人的網頁, 看到其他 event widget, 不需再登入即可直接在上面操作報名..
- 整合已有的 web 環境, 也就是說在網站裡登入了, 同時 widget 也會記住登入資訊..
- 可以提供以後其他的 event 報名使用, 也就是要為未來成為一個系統做準備..
主要 framework 我是選用 java +
spring +
hibernate(orm) +
webwork(web) +
acegi(authentication) +
dwr(rpc), client 端 javascript library 則用了
prototype,
scriptaculous(移動的效果),
niftycube(圓角效果),
fat(背景淡出效果)..
沒辦法, 還是 java 為主, 雖然上星期在
coscup 又聽了 rubyonrails 都大約只要 20 分鐘, 幾小時, 幾天這樣的開發時間就能做出東東的演講. 但我還是覺得 nothing comes for free 囉..
後台整合的部份我就不說了, 要讓 acegi 與 dwr 合作, 我也花了點時間客製了幾個部份, 才能順暢的將 dwr 揭示的物件權限交由 acegi 統一管理..
這裡的重點就直接進入 widget 製作, 在把後台整理好之後, 我立刻面臨要選用哪種方式做 widget 的難題, 我參考了
widgetbox與
google gadgets, 一般有三個方法:
- 直接將 widget 塞到網頁中: 建立一個新的 <div>, 然後把所有資料就塞進去..
- 將 widget 放到 <iframe> 再放到網頁上: 建立一個 <iframe>, 然後把所有資料放進去, 主網頁與 widget 網頁不相關..
- 用 flash: 我不會, 所以跳過..
我的製作過程, 大概就一直在方法 1 與方法 2 擺盪, 因為實在很難取捨. 兩種方法的優缺點如下:
方法 1 優點:1. widget 可以被環境影響或是去影響畫面上的其他部分. 也就是說, 當你 resize 你的 widget, 畫面上其他部分也會跟著被重新定位, 看起來感覺很好, 我們也不需要去預先設定 widget 的長寬.
2. 可以控制整個頁面, 所以做得到效果如
tooltip,
lightbox, ...
方法 1 缺點:1.
script & css including開發 ajax 難免要使用 javascript library, 但卻不能保證不會有 javascript library 衝突..
我使用了一堆 script library, 但是卻不知道使用者是否也有使用了同個版本的 script.
我們唯一能做的, 大概也只有多檢查 (可以參考 scriptaculous 的 loading 方式)..
2.
cross site scripting因為要讓使用者在自己的 blog 也能安裝, 所以要能跨網域是非做不可..
有兩種方法達到這個目標:
1)
switch domain: 但是我擔心換到使用者的網頁上會造成不預期的結果, 所以沒試
2) script tag: dwr 就直接支援這個方式, 但是, 我也不知道哪裡出問題, 跨網域的話就硬是留不下 script 的 cookie, 也就是相對影響了記住使用者的登入資訊這類的功能. 我有試著找看看問題, 但是一無所獲..
3. 可能造成的網頁干擾
我不確定干擾的狀況, 但是若作為一個 framework 的一般性規則, 還是需要考慮一下這個事情很有可能會發生的..
方法 2 就像是方法 1 的鏡子..
方法 2 優點:跟原本網頁不會干擾, 也沒有 cross site scripting 的問題. 也就是針對方法 1 而來的解藥.
方法 2 缺點:沒有辦法與主網頁互動, 也就是沒有 resize, tooltip, lightbox..
最後, 在一連串的 xx 聲中, 我還是選擇了方法 2, 放棄了幾個已經做好的特效.
widget 大家可以看左方, 有興趣也請試用看看..
對 HappyWeb 有興趣, 也請快快報名參加喔..
大概現在能想到的心得就這樣, 若有想到我就再補充吧~~
還有幾個功能想要再做上, 如其他人報名了, 可以動態更新大家最新的報名人數..
有機會的話, 也想再做做其他功能的 widget..

tags:
java dwr ajax
Nov 01 2006, 03:55:59 AM CST
Permalink