2008年10月14日

Javascript 小技巧 Part1

雖然說可能從此就停留在 Part1 (或者 Part2 就交給坎尼了 XD),
不過還是彙整一些過去一年來比較值得紀錄的 js 訣竅。
(其實是 Rosario & Oslo 資料太多還是看不完XD)
  1. 如何讓使用者點了 <a> 的連結之後,另開視窗,但原視窗的定位點不變?
    這是昨天做的一個小小的 streaming 網頁用到的技巧,由於一般人習慣去點連結,
    但是因為我要拿來作 streaming 的檔案來源是用 PowerCam 錄的,
    播放的時候需要用到 fsPlayer,才能完全享受更好操控的 UI,
    而 fsPlayer 又會佔掉很大的版面,因此還是以另開視窗(window.open)為上策。

    我原本是寫 <a href="#" onclick="open()">Watch Video</a>,
    但是很快就發現這樣會讓網址變成「http://yourDomain.com/index.htm#」,
    雖然的確不會讓網頁連到其他地方去,但是網頁的定位點會被捲到網頁最上方

    稍微找了一下就發現還有另一種寫法(參考網頁在這裡):
    <a href="javascript://" onclick="open()">Watch Video</a>
    果然改寫成這樣之後就不但可以另開視窗,而且原本網頁的定位點都不會跑掉~
  2. 如何用一行程式碼計算出某年某月有幾天?
    這是 ... 快一年前作的 XD 趁這個機會彙整一下,主要是參考這個網頁
    記得以前像這樣的敘述可以當作程式的題目,要小心閏年、閏月等等,
    隨便寫應該都要好幾十行,但是有人發現其實只要一行就可以搞定了:

    return 32 - new Date(iYear, iMonth, 32).getDate();

    主要就是靠 js 允許讓 Day 產生 Overflow 這樣的特性來做的
    (詳細說明請看參考網頁),看到這個範例之後,我就手癢的寫了 ASP 版,
    還有 ASP.NET 版 (C#),雖然說在 .Net 的世界裡,Date 本身就有 DaysInMonth 這個 static method (ref),但是應用上面那個 js 的思維,一樣都可以實作出來唷!

    雖然好像只有 js 可以做到一行必殺,其他語言都還要轉型之類的多寫個兩三行,
    但是 js 的那行程式真的就有種藝術的感覺,用一種很超俗的手法來解決問題,
    真的是很厲害。這行程式還可以用來檢查你自己寫的閏年判斷是否正確。

    我自己寫的小小程式 (三個版本) 可以在這裡下載。
  3. 如何強制 IE7 關閉視窗 (Tab),而不會跳出確認視窗
    這個 ... 在 IE6 大家都會,IE7 一直過了很久才看到有人找出解法,
    因為不是我發現的,So ... 直接參考小喵的 blog 吧 XD
咳,好不容易湊出一小篇文章,真是有種很久沒寫程式的感覺 Orz
Part2 就交給坎尼啦 :p

2 則留言:

坎尼 提到...

如果不確定使用者的browser是IE6還是IE7的情況下
可以把 js code 寫成
window.open('','_self','');
window.opener=null;
window.close();

Unknown 提到...

紀錄剛剛在點部落看到的文章,提到了一些之前沒注意過的 API,還有不同的作法:http://www.dotblogs.com.tw/yc421206/archive/2008/11/16/6002.aspx

Google Spreadsheet 裡用規則運算式

最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D