天天看點

Android-WebView內建iScroll4之input框無法擷取焦點

最近給公司做一個企業App,Android用戶端+Java服務端,總共有十幾個子產品,其中有幾個子產品就是從服務端查詢資料,手機上的功能有清單展示及下載下傳附件。

我是做Java服務端開發的,不會Android,另外有android開發人員,經過讨論決定這塊手機直接通路Java服務端(Java web系統)的頁面,源自于開始給公司一個pad應用,也是光查詢資料用,采用的是Android的webview通路web的一個url。

其實webview這種做法,最簡單,省事,省成本,不用純Android開發,web頁面能通路,沒問題,拿到手機上,或pad上測試——基本沒什麼大問題,有的話也是些css,js相容性的問題。

是以這個功能我很快就在服務端開發完了,就是為了樣式和相容性,引入了jQuery-1.9.1,jquery.mobile-1.3.2。頁面上一個文本輸入框,可以輸入标題進行查詢,下面展示的就是清單。在手機上也測試了,大部分手機都沒問題。

後來,交給測試部測試,人家來個壓力測試,才1000多條資料,直接就死掉了,因為這個清單沒有做分頁功能。好了,加分頁吧,關鍵是手機上分頁得下拉重新整理那種,怎麼做,上網一搜,發現都在用開源的iScroll,網上有很多例子,後續也會專門來寫這塊,是以很快就加入到項目中,分頁效果還不錯,下拉重新整理,上拉加載更多資料。

但是迎來的第一個問題就是那個input輸入框怎麼都沒有焦點,壓根不能輸入,這必須得解決啊,開始沒去網上搜,覺得是個小問題一會兒就能搞定,最後發現不是這麼回事。我開始解決辦法是頁面加載完成後寫js讓input獲得焦點就是設定focus方法了,電腦上好使,手機上不好使。後來Android開發人員說,它在Android端能夠調我頁面的js方法,這樣好啊一試,發現有些手機上好使了,但是有些還是不好使。沒辦法,我把js一層一層過濾發現是iScroll的問題,隻要把這個加載進來就不好使,去掉就好使,帶着這個問題再上網搜,暈,發現網上到處是這個問題,而且解決辦法千篇一律,就是讓iScroll過濾input等html标簽:

onBeforeScrollStart: function (e) {
				var target = e.target;
				while (target.nodeType != 1) {
				target = target.parentNode;
				}
				if (target.tagName != 'SELECT' && target.tagName != 'TEXTAREA' && target.tagName != 'INPUT') {
				e.preventDefault();
				}
			},      

 重寫這個方法,加上要過濾的标簽input等。

按照這個改了後,發現電腦上好使,我用的chrome最新的39,專門為開發webview頁裝的,手機上還是不行,找了半天原因,還是不知道哪出問題。後來測試版本更新,給卸了重新安裝,再測,發現好了,突然明白了是手機上緩存的原因。緩存啊,一直都在關注浏覽器的緩存,忽視了手機上的緩存,還是手機開發做的少啊。

繼續閱讀