看張大春網站上面最近吵文化創意產業吵得火熱,也來發點牢騷。
Author Archives: zonble
公部門資訊與行動軟體
在 2008 年 iPhone SDK 推出、蘋果的 AppStore 開張不久,馬上就有承包美國政府網站及各種電子化政府應用的廠商,推出了一套功能是提通 FBI 頭號通緝要犯資訊的免費軟體,裡頭包括恐怖份子、凶殺要犯、失蹤兒童協尋…等等。
關於恐怖份子這部份總覺得用途似乎不大。在大部分人的生活中,大概不太有機會走在路上就遇到奧薩瑪.賓拉登,不過我也是因為隨手把這套軟體裝起來玩玩,又稍微瞄了一下賓拉登的個人資料,才驚訝地發現原來賓拉登的身材真是驚人-身高 193 公分,但是體重卻大約 70 公斤左右,簡直像仙人一般。如果在我的生命中,真遇到像這樣人跟我灌輸偏激的宗教思想,搞不好我也會因此投身自殺攻擊的行列。
現在用 FBI Top Wanted 這類關鍵字搜尋,可以在 AppStore 中找到好幾套軟體,有的免費,也有一些付費的版本。總之,iPhone SDK 公開不久,FBI 的通緝資料,就已經裝在 iPhone 用戶的口袋裡頭了。
在桌面應用程式中使用 WebKit (5) - Mobile Safari 的 Plug-in
這一篇的內容對很多人來說大概沒什麼用,因為就算照著這篇提到的東西,寫了點程式出來,實際上也沒多少機會可以在使用者的裝置上應用,可是呢,只要討論 Cocoa,好像大部分人都興趣缺缺,談到 iPhone 卻又興致盎然。
※ iOS 的 WebKit Plug-in 基本上是一樣的
前一篇提到,我們可以直接在 Xcode 當中,透過 Xcode 本身所提供的專案範本,產生 WebKit Plug-In 專案,我們現在來做點好玩的事情。-我們把原本專案裡頭所有跟 Cocoa 相關的東西都拿掉,像是 Import Cocoa Framework 的地方,改成 Import UIKit,NSView 改成 UIView,NSRect 改成 CGRect,把 Base SDK 從 Mac OS X 改成 iPhone Simulator,在 iPhone 上面沒有定義 WebPlugInViewFactory,我們先拿掉,或是自己定義一個,裡頭只要宣告 + plugInViewWithArguments: 即可。
在桌面應用程式中使用 WebKit (4) - Plug-ins
應廣大(?)讀者要求,接下來聊聊 WebKit 的 Plug-in。
首先,瀏覽器的 Plug-in 與所謂的 Extensions、Add-Ons、Accelerators 是不一樣的。Plug-in 的用途是讓瀏覽器可以開啟原本所無法開啟的檔案,而 Extension 則往往是用 HTML、JavaScript、CSS 或其他技術,增加瀏覽器的功能。比方說,我們想要在瀏覽器畫面上方增加一條工具列,這個工具列上面有一堆按鈕,讓你可以把現在瀏覽的內容貼到 Twitter 上,讓你快速使用某個搜尋引擎,或是把現在的網頁丟到某個 HTML validator 檢查看看有哪些問題,這是 Extensions。
而瀏覽器原本只能瀏覽 HTML 檔案、純文字檔案,還有 GIF、Jpeg、PNG 等圖形檔案,沒辦法直接播放 mp3(其實現在的瀏覽器可以支援 audio tag)或影片檔案(現在當然也有支援 video tag 的瀏覽器),所以,瀏覽器就提供了一個架構,在遇到這類型的檔案時,如果知道某個 plug-in 可以處理這種檔案,就在畫面中挖出一塊空間,讓 plug-in 處理這些檔案,然後把 plug-in 的畫面填到預留的空白中。或這麼說-我們在 HTML 中使用 embed 語法的時候,就是要使用 plug-in 的時候。
在桌面應用程式中使用 WebKit (3) - JavaScriptCore
前一篇最後簡略提了一下 JavaScriptCore Framework。JavaScriptCore 是 WebKit 的 JavaScript 引擎,目前的實作就是代號叫做 SquirrelFish,吉祥物是一隻長相恐怖的祕雕魚。
一般來說,在 Mac OS X 上,我們想要製作各種網頁與 Native API 程式互動的功能,大概不會選擇使用 JavaScriptCore,因為現在寫 Mac OS X 的桌面應用程式,多半會直接選擇使用 Objective C 語言與 Cocoa API,各種需要的功能,都有像在前兩篇提到的 Obj C 方案-使用 WebKit Framework 中的 WebScriptObject 與各種 DOM 物件。
在桌面應用程式中使用 WebKit (2) - JavaScript 與 Objective C 的溝通
在寫 JavaScript 的時候,可以使用一個叫做 window 的物件,像是我們想要從現在的網頁跳到另外一個網頁的時候,就會去修改 window.location.href 的位置;在我們的 Objective C 程式碼中,如果我們可以取得指定的 WebView 的指標,也就可以拿到這個出現在 JavaScript 中的 window 物件,也就是 [webView windowScriptObject]。
這個物件就是 WebView 裡頭的 JS 與我們的 Obj C 程式之間的橋樑-window 物件可以取得網頁裡頭所有的 JS 函數與物件,而如果我們把一個 Obj C 物件設定成 windowScriptObject 的 value,JS 也便可以呼叫 Obj C 物件的 method。於是,我們可以在 Obj C 程式裡頭要求 WebView 執行一段 JS,也可以反過來讓 JS 呼叫一段用 Obj C 實作的功能。