Pages

搜尋此網誌

2012年9月15日 星期六

[ExtJs] iPod 搭配藍牙barcode掃瞄器,事件監控疑難排解


話說在前頭,不知道是extjs的問題還是我們寫程式的問題,但問題確實發生了,在我們專案的開發中遇到一個很奇怪的問題,在開始說明問題前,先說明一下環境


  1. 在我們的專案裡為了讓使用者方便輸入資訊,利用外部設備barcode進行資料輸入媒介,在有線的的barcode掃瞄器Extjs之 textffield可以正確listen barcode結束的Enter Key Event(無論任一品牌瀏覽器)
  2. 因為客戶需要使用平板(iPad)進行操作我們系統,就ExtJs而言,號稱跨瀏覽器平台,基本上運作也是沒問題的,為了讓iPad也要能夠使用barcode ,在沒有USB界面的情況下這時候就要使用藍芽barcode來解決輸入的問題
  3. 在開始測試藍牙barcode時已有先使用note book測試,必須將藍牙barcode 模擬成SPP(共有兩種模式 Serial Port Profile (SPP) 也就是RS232通續界面,Human Interface Device (HID)也就是USB界面),才能正常讓ExtJs能夠偵測Enter Event,若是用HID模式,會有莫名其妙的縮排
  4. 而因為iPad並沒有辦法模擬SPP故也只能用預設的模式HID,一般來說我們就會對客戶說明本系統無法支援,此時這問題應該告一段落,但神的旨意就是要你面對此問題,此時客戶測試google 的搜尋,卻是可以正常運作,刷讀完後可立刻將搜尋的條件送出,甚至在我們的系統首頁的使用者賬號輸入也可以正常監聽Enter Event(見鬼!)
因為上述狀況,開始研究到底問題出在哪,究竟我們系統首頁可以為什麼ExtJs元件卻無法運作,首先必須先分析問題

  1. 先測試Extjs 之 textfiled 的 key Event 確認運作是正常的,使用ipad Enter鍵 也是正常work 可以初步研判問題還是在barcode的結束輸入應該跟原本的不同
  2. 再來深入了解系統首頁所使用的網頁是用純Html製作,且是用from 包 input 並且用到事件 onSubmit
  3. onSubmit可以work!?那Extjs的Form應該也可以囉!?測試後的結果,確實可以運作了!但有個問題,submit之後頁面會重新刷新,無法保留使用者操作的結果(一般來說 onSubmit="return false;"可以中斷,在ExtJs同樣事件下無法中斷,查詢相關資料有說到因為Extjs的運作是用ajax模擬),此問題必須被解決
在嘗試幾種方法後,似乎還是美中不足的方法,在時程壓力下,只好先用可行解

  1. 使用Extjs中 元件可定義Html的方式撰寫最原始的html code (如同系統首頁的形式)
  2. 將原本ExtJs事件搬至另一個function (onSbmit="submitTest();return false;")
  3. 測試後發現,無法終止頁面重載!?還好還有救,改在 submitTest() 最後加return false;
上述調整後,運作正常!但ipad的safari 瀏覽器有一個奇怪的問題(煩~),只要頁面有縮放,將無法再用藍牙barcode刷讀資料,靈機一動,還好我生對時代,我們還有好朋友chrome可以試,雖然在iOS功能不完整,但運作正常,也沒有safari 的問題(safari 加油好嗎?),感謝google大神,幫我節省時間~

這次問題的處理算是告一段落了,最後既然iPad試過了,環境也都有了,就順便連android一起測試看看,沒想到登登了~剛剛針對iOS作的調整完全沒效,連系統首頁,以及google的搜尋列也掛了!研判應該是不同OS對外部裝置輸入處理的界面不同,才造成這樣的結果,只好先跟公司的顧問與客戶說明藍牙barcode的solution 無法支援android(換google 要加油了),當然也許是設備的問題,這就不探討了,畢竟不是我們的產品

結語:軟硬體整合實在是問題多多,特別是市面上這麼多不同的手持裝置,不過話說回來,我們這時代已經夠幸福了,還有網路資源可以搜尋,這件事也讓我學到,framework不是萬能,若是侷限於framework 上述問題應該沒辦法立即解決,甚至無法解決,有時必須退一步想

以上,各位先進,若有建議歡迎提出來,也歡迎討論,感謝!
張貼留言