Phonegap+JqueryMobile問題總結與經驗彙總

Phonegap+JqueryMobile問題總結與經驗彙總

 

   最近用phonegap+JqueryMobile開發了一個程序,跨android和ios兩個平臺,這期間遇到了很多問題,在論壇上苦苦搜索以及提問,但好多問題都沒有被解決,網上搜的很多答案都是轉帖或者不準確的。後來通過自己的研究和探索以及在stackoverflow上的一些資料,終於把項目做完了。現在總結一些實用的技巧:

  1 關於載入框的自定義,顯示和隱藏

新版本的JM需要這樣設置

$.mobile.loadingMessageTextVisible=true;//使載入時文字可見

$.mobile.loadingMessage="載入中...";     //設置文字內容

設置完上面的兩行代碼後,就可以正常使用了

$.mobile.showPageLoadingMsg();//顯示

$.mobile.hidePageLoadingMsg();//處理完成後隱藏

  2頁面跳轉時很實用的changeHash: false功能($.mobile.changePage的可選參數

 (頁面跳轉後,是否保存此界面的記錄)   

我認爲此條是非常實用且重要的,因此加了紅色標題。changeHash:false 是$.mobile.changePage即頁面跳轉時的可選參數。官方解釋爲:changeHash (boolean,default: true) Decides if the hash in the location bar should be updated. 決定在locationbar裏的hash值是否更新。簡單的說就是是否要把本次打開頁面的記錄存放到hash表中。下面舉個例子說明:有三個界面A,B,C.   A界面爲首頁,B界面爲登陸頁面,C界面爲用戶中心。如果點擊A界面裏的用戶中心按鈕,先檢查用戶是否登錄,如果沒有登錄,那麼先跳轉到B界面。用戶填寫信息登錄成功後跳轉至C界面。B界面裏的登錄js代碼在處理成功後,如果你這樣寫:$.mobile.changePage($("#C"));雖然跳轉到了C界面,但是當你點擊返回按鍵時,會返回到B界面,也就是登陸界面。這樣顯然是不對的。如果加上本參數$.mobile.changePage($("#C"),{changeHash: false});  那麼到C界面後再點擊回退按鍵,回退到的就是A界面了。參數的作用從字面即可理解爲,是否要保存hash記錄。保存了就會返回到B界面,不保存則返回到B之前的界面也就是A界面了。

 

3關於phonegap播放音頻文件的位置:

 Android:如果放在www目錄下,應該這樣寫:

var my_media=new Media("file:///android_asset/www/boot.mp3",function(){});

IOS:寫法比較簡單,www目錄下

Var my_media=new Media(“boot.mp3”,function(){});

 

4 如何去除ios界面上下拖動時彈性的黑邊顯示

  在ios的主界面上,明明一屏就顯示完了,也不存在滾動條的情況下,當上下拖動時,界面還是會跟着上下活動,並且出現很討厭的黑邊。在網上搜索此問題,有的解決方案是這樣寫的:

 UIWebView *contentView=[[UIWebView alloc] init];  
    [(UIScrollView *)[[contentViewsubviews] objectAtIndex:0] setBounces:NO];  

但是這對於ios初學者以及純phonegap+JM開發者來說,根本不知道加在哪裏。其實是有一種更簡單的辦法的.打開Cordova.plist文件。我們可以找到

 UIWebViewBounce字段,默認的value設置的是Yes,只要把它設置爲NO,問題就完美解決啦。View就無法bounce啦~\(≧▽≦)/~

5 關於跨域訪問問題

$.mobile.allowCrossDomainPages

 

當jQuery Mobile嘗試加載外部頁面的時候,請求會通過$.mobile.loadPage()發出。 只有當$.mobile.allowCrossDomainPages被設爲true的時候,跨域的請求才會通過。 因爲jQuery Mobile框架會通過瀏覽器的location hash值來跟蹤哪些頁面被瀏覽過,如果有問題 的 跨站腳本攻擊(XSS攻擊)能夠修改hash 值並設爲一個跨域URL值的話,就可能會有安全性上 的問題。這就是爲什麼$.mobile.allowCrossDomainPages 默認設爲false.

所以如果PhoneGap應用想要加載遠程服務器的文件,

$.support.cors 和 $.mobile.allowCrossDomainPages 都必須設爲true.並且 $.mobile.allowCrossDomainPages的設置必須要在跨域請求之前完成。 所以我們建議在mobileinit 中這樣寫:

 

$( document ).bind("mobileinit", function() {

$.support.cors=true;

$.mobile.allowCrossDomainPages= true;
});

 

 

另外在ios的開發中,我們還需要配置白名單,否則訪問其它主機仍然是不允許的。

在Cordova.plist中找到ExternalHosts字段,在其中加上你要訪問的遠程主機。最簡單的辦法是:


ExternalHosts加一下選項爲**號的意思是可以匹配爲任意字符的url。這樣就可以訪問外部的url了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章