網頁

2008年12月27日 星期六

Which is the best JavaScript and Ajax framework?

* jQuery (52%, 356 Votes)
* Dojo (14%, 99 Votes)
* Prototype.js (13%, 91 Votes)
* Ext.js (9%, 62 Votes)
* Mootools (7%, 47 Votes)
* YUI (Yahoo User Interface) (7%, 45 Votes)
Total Voters: 690

2008年12月24日 星期三

ROR Production mode改code不想restart,code寫在view中

Ruby on Rails在Production的模式中,有時偷懶不想在controller中寫action,因為controller中的修改需restart server, view則不需要,打算把code寫在view裏面,然後呼叫/controller/action,結果一點反應也沒有。

要記住!!剛新增的view還是要先restart server一次,server才會知道有view的action可以呼叫,之後修改code就比較方便做測試。

處理iframe auto height(Iframe自適應高度)

全部參考:
1.Iframe自動調整高度, 在子網域SubDomain的情形
2.處理iframe auto height(Iframe自適應高度)
3.處理iframe auto height(Iframe自適應高度) - 相關問題紀錄
4.完整的iframe auto height程式(在iframe內容頁中處理)
5.或許你想要 "html include html,兩種工具介紹。"


注意


1.現在會寫下這篇的主要原因在於google chrome中,iframe的高度,會不斷的增高,當不斷按下iframe.content中的連接時,會不斷的reload。
2.這篇無法處理cross site的問題,先前有一篇「Iframe自動調整高度, 在子網域SubDomain的情形
3.請參考處理iframe auto height(Iframe自適應高度) - 相關問題紀錄


處理的過程是


1.是從iframe的onload事件處理
2.或是從iframe content的onload事件處理
3.將iframe.height設成iframe.content.height。

但過程中就會遇到很多問題

Iframe 的onload事件


1.在Linux的Konqueror中似乎只有第一次, 之後內容的改變都不會再onload.
2.Mac的Safari似乎沒有這個onload事件, 因此Iframe先預設高度為2000px.
3.而IE 6; Firefox 2; Opera 9都沒有問題.

這個onload問題決定的是,要在iframe或iframe.content的onload事件來處理

iframe.content.height的取得問題


和height有關的屬性有clientHeight、offsetHeight和scrollHeight,參考 http://www.tsolong.com/post/355.html
1.每個Browser的定義不相同
* 參考同上。

2.當設DOCTYPE後還會產生變化
* 目前的測試是,沒加的話,3種高度Height會依Browser的設定
* 有加的話,不論那一種,3種高度Height都同樣拿到scrollHeight的值。

3.想說用jquery來取得height,也會受DOCTYPE設定的影响
用alert($("body").height()+" "+$("body").outerHeight()+" "+$("body").innerHeight());來測
* 在chrome和firefox中,不論DOCTYPE設什麼,或沒有設,3種高度都同樣拿到scrollHeight的值。
* 在IE7中,DOCTYPE有設,3種高度都同樣拿到scrollHeight的值。
* DOCTYPE沒設,3種高度都同樣拿到像是clientHeight的值。
* 需在每個頁面加入jquery.js

4.chrome中的iframe.document.body.scrollHeight會受iframe.height影响,
5.本文後面還遇到css設定position:absolute影响高度的問題

以上問題試了好幾個小時,覺得這真是個有點難解。

目前的解法


1.在iframe的onload中處理
2.每個iframe content一定要有DOCTYPE(解決chrome的問題,才能用offsetHeight)
3.用offsetHeight的值(解決chrome的問題)



這段code已測試的,Firefox3、IE7、Chrome。
還想在Konqueror、Safari、Opera、IE6中做測試。
不敢保證用offsetHeight在未測試的Browser或舊版本中不會遇到問題。
在iframe.onload中處理,也可能有瀏覽器會遇到問題。

實際運用後又遇到問題


http://of.openfoundry.org/projects/1/sympa
在網站連接sympa(mailing list system)的時候,設高度的功能硬是失效,原來拿到的content.height是0,為什麼是0呢?
經檢查發現以下片段



名為Canvas的div將整個網頁包住了,並且設為position: absolute;,造成Canvas像是定在那裏,而整個網頁並沒有高度。(目前只確定Firefox3有這問題,其它Browser沒有測試)

2008年12月23日 星期二

Perl的中文問題

為什麼要用 UTF-8 mode 執行 perl 呢?因為 Perl 的字串預設是 byte string,
在程式中要處理中文字時, 就無法如預期的執行.
在程式最前面加上下面程式碼:



詳細參考 Perl with UTF-8 mode

IE7中只認得gray, 不認得grey

要用jquery來改背景顏色為灰色, 用了以下的語法
$("#abc").css("background-color","grey");
結果在IE7中出現錯誤訊息"內容值無效", firefox則是正確的.
原來英文grey = gray
但在IE7中只認得gray, 用grey會出現錯誤訊息"內容值無效".

在IE的table->td中若沒有值

在IE的table->td中若沒有值, 會連border都不見了.
解決的方法是
1.加入「空白」或「 」, 可以用jquery替空白的td加入, $("td:empty").html(' ');
2.本來希望CSS可以解決但是empty-cells:show卻不被IE支援...

這篇Fun with tables, 講了不少Table的問題.