博主一直都是做web開發,前段時間有個小想法,想給自己做個android小應用(很小,功能特別簡單)。
了解到可以用js直接做,貌似很簡單,選用了wex5(基於codova插件)來直接開發。
最終發現比直接用java踩到的坑還多,這里總結下:
1、在w文件中寫的css會被做加工,可能產生問題。
我在里面寫了個h5動畫效果,單獨代碼抽出來可以使用,放到wex5中就是不能生效,百思不得其解,我一直以為是哪里寫錯,或者和哪個效果產生沖突,想了兩個晚上,還是沒思路。把頁面源碼抓出來發給朋友幫忙看,朋友一下子就說明問題所在“某某地方應該要有px單位”。當真沒想到,竟然是被編譯軟件去除掉的,我完全不敢設想是編譯軟件問題,還一直在尋找自己寫的代碼中的錯誤。
解決方法:把css寫在單獨的css文件里面(不和w文件同名),然后用資源引入,例如:<require xid="require1" url="css!$UI/xiangmu/animation"></require>
2、跨域問題。
wex5的頁面,在調試的時候都是指向例如127.0.0.1:8080域名,而自己使用的后端服務域名假設為example.com,ajax訪問是需要跨域的,我以為這都是前提,不能修改。於是做了很多工作來解決跨域問題:
I、服務端添加允許跨域訪問的頭(為了跟web比較像,放棄使用jsonp形式);
II、返回sessionId(跨域訪問,cookie帶不過來,使用ajax返回頭讀不到);
III、修改express-session中間件,使能直接query傳遞sessionID(這是express-session的一個坑,cookie帶了加密,而我又不能直接讀到cookie結果,所以只能修改它,這個方法很糟糕,很丑)
整個開發過程,讓人很難受,浪費很多時間,方法卻依然如此丑。
解決辦法:看了wex5文檔里面,建議ajax請求使用插件帶的request請求方法,就無需跨域(還是那么丑)
我目前選擇使用的是修改調試域名,直接使用自己的example.com域名,然后服務端對應wex5頁面的更新請求全部使用304(not modify)返回。
總結:wex5並不是我所想象的能迅速開發出應用的(我以為就行瀏覽器功能加了本地頁面,加了一些api)。整個技術棧還是比較深的。為了降低學習成本,我略過了官方文檔,然而卻帶來的是自己屢次碰壁,把時間花在了各種旁門左道上面。