最近 Opera 台灣隨著15週年辦了一系列的活動,包括使用者聚會、校園講座與徵才,15週年記者會等,小弟我有幸參與了其中幾場,好像可以簡單介紹一下XD。
Opera 大約是去年年底在台灣成立分公司,雖然 Opera Desktop 在台灣幾乎是沒什麼能見度,可是在電腦以外的平台佔有率還是最高的,不過 Opera 台灣並沒有打算只專注在這些平台,除了推廣外,還要把台灣為數不少的 Opera 使用者集結起來,讓社群成形,現在不但有正式的中文討論區,還有官方的 Twitter帳號 和 Plurk帳號,另外還有 Opera 第一手消息這個部落格。目前是可以預見他們會對台灣使用者開始投入些心力、資源,總之是好是一件。
在這次活動中,有人問到,為什麼 Opera 功能那麼強,但是使用者還是不多,那時候 Andreas 說他們也好奇原因,其實我一直以來也很納悶, Opera 本身除了效能好,還內建很多功能,其中不少還是 Opera 首先推出的,但是一直以來他們的佔有率就是不高,即使成為免費版後也沒有提昇多少。不過我想這會一直是個難解的問題,但是至少我自己選擇的原因我還有點印象,說來算是時間點不好,當我在決定要選哪個瀏覽器時,Opera 畫中文還畫的很難看,這應該是我當初選擇使用 Firefox 而不是 Opera 的主要原因(我對這種東西很外貿協會的XD),後來才知道 Firefox 很多擴充套件的功能是 Opera 直接就有內建的。
剛好大約一個月一次的摩茲連續聚,我下次還沒想到可以分享什麼東西,大概就介紹 Opera 吧XD,所以應該這兩天開始要強迫自己用 Opera 用一個月了XD,到時候從功能面來介紹它:P,雖然不能吸引到 IE 使用者跳槽就是~_~。
昨天我才被微軟救到,今天它就用 IE 來討債了Q_Q,這件事要從 JOYSOUND 講起, JOYSOUND是日本的一個卡拉OK系統,前陣子推出了 Wii 版,讓使用者可以用便宜的月費就可以唱到數萬首日文歌曲,不過使用上有個問題,就是它的網頁沒有針對 Wii 版的搜尋功能,透過 Wii 介面來搜尋又不夠快,於是我就自己手寫了一個 http://joysound.othree.net/,資料來源是他們網站,我定期去撈新增曲目,結果最近太混,才發現 7 週沒有去更新,網頁上又只保留 5 週份的更新資料,於是就趕快上 Google 看有沒有 cache,順利的找到4份中的3份,但是有一份找很久都找不到,過了幾十分,找了一堆日本的搜尋引擎,才在日本 MSN 找到那個網頁的 cache,於是心中一顆大石頭終於落地,也實在沒想到會讓微軟幫到這樣一個大忙。
時光飛逝,歲月如梭,一下就來到了新的一週,早上九點半開始開了四小時的會,回到電腦前一看發現有 IE bug 要解,沒想到這一個 bug 讓我整整花了4個小時才解決掉,一開始看起來是 javascript 問題,搞到最後竟然是無法說明的 CSS 地雷,花了數小時,只砍掉下面這樣一行東西而已:
right: 0;
更讓人難過的是這個 bug 是在 IE7, 8才會發生的,講到這我就必須要抱怨一下 IE,這陣子處理不少問題根本都還是 IE7, 8 還在的,感覺上 IE 這兩次升級對於 javascript 相關的部分都沒什麼改善,這也是為什麼我決定把這裡弄的讓 IE 都看不到。
最後就是提一下,大概要怎麼判斷是不是 CSS 地雷,和要怎麼找,基本上,會被稱為地雷,就是那種會看起來應該不會有問題,出了問題你也不知道問題在哪的狀況,如果是 javascript 的問題現在瀏覽器都可以妥善處理,不小心跑進無窮迴圈也不會跑到死,所以如果一直出現找不到的問題發生點的話,那就有可能是 CSS 地雷了,像我這次遇到的狀況是整個 IE 吃光 CPU,但是不會有訊息問我要不要停止執行 script,然後我找了很久,排除頁面上各種可能產生影響的 javascript,最後才懷疑到 CSS 上,這時候我已經浪費超過三小時了,要判斷是不是 CSS 問題到很簡單,先把 CSS disable 掉試試看就知道了,如果一 disable 掉問題就沒了,那很明顯就是 CSS 的問題,接下來就是用消去法來尋找造成問題的 CSS 定義,就不贅述了。
真的最後了,就是其實 JOYSOUND 現在已經可以在網頁上搜尋 Wii 版曲目了XDD。
暫時站本來用下面的語法來阻擋IE使用者:
<!--[if IE]><style type="text/css">* {display: none; !importanat}</style><![endif]-->
不過用IE還是看的到 title,不太愉悅,今天 EvenWu 推薦我另一個弄法:
<!DOCTYPE html>
<!--[if !IE]>-->
<html>
<head>
<title>blah...</title>
</head>
<body>
blah blah...
</body>
</html>
<!--<![endif]-->
現在用 IE 來看感覺真是棒XD
onload 越來越少人在用,而改用像是 DOMContentLoaded 這種事件來代替,像是 jQuery 也有個 ready event 可以用,主要是因為 onload 事件還要等待網頁中所有的元素都讀取完畢(或是 timeout),這些元素包括圖片,其他網站的 style, script,flash 物件等,常常訪客開始看網頁內容時,需要執行的 script 卻還沒開始執行,不過並不是所有瀏覽器都有支援 DOMContentLoaded 或是提供其他替代方案,所以各家 js library 為了處理這問題就無所不用其極限。
我是傾向用另外一個方法處理這問題,不過需要一些對網頁內元件的控制能力,其實也很簡單,就是把 script 放在頁面尾端,然後馬上跑,這方法除了可以解決上述問題外,還有另外兩個好處,一是所有瀏覽器都支援,二是可以讓網頁內容先讀進來才跑 script,這也是 YSlow 的建議項目之一,當然如果你就是想那讓那些瀏覽器的使用者看起來感覺不好,就當我沒說吧XD。