㈠ 記錄app webview內嵌vue單頁應用所遇到的坑
so在這個過程中無可避免的還是踩了一些坑,所以記錄之,先大致說下用到的技術棧:vue全家桶(vue/vue-router/vuex)、sass、axios還有一套ui框架mint-ui,大致也就這些。下面來扒扒都遇到哪些坑。
1.vue-cli腳手架打包的項目部署到伺服器上打開空白
首先可以確保路徑是沒問題的,vue-cli打包生產腔空春環境直接修改config目錄下的index文件即可。將assetsPublicPath指向你所要放置的伺服器目錄,並用最後一個文件夾名作為你的項目名。如 http://.com/app/events/my_activity 。 那路徑沒問題的話。問題出在哪裡呢?經過排查,是vue-router中將mode設置為'history'的緣故。由於一開始以hash模式的url是帶'#'號的,本來想著讓url好看點,所以用了history模式。雖然在本地調試的時候沒問題,但是不部署的話還是需要後台進行相關配置的。這里網路一大堆,不贅述了,隨便貼個地址, 看這里
2.webview上自帶的坑
講真的這個只能找你們移動開發的同事。比如我這邊遇到的是H5頁面內嵌的時候伍耐上拉下拉會出現回彈的效果,這是他們加上的,這個難免會對h5造成一些手勢沖突。比如我只是想滑動底部的時間選擇器來選時間,但是頁面不受控制會自動上彈。還有就是定位在中部或底部的輸入框,理應在彈出軟鍵盤時自動將鍵盤頂上去的,這個也應該由移動端開發那邊來做相關設置。
3.單頁應用不重載頁面導致無法調用IOS的某些回調函數
這個是真的坑。在瀏覽器上跑都好好的,內嵌進app的時候發現ios打開頁面後一直有一朵小菊花在loading,盡管數據已經載入完成了。切換頁面也一樣,除非刷新頁面。那問題來了,誰的鍋?又是經過一系列排查,發現這個是單頁應用跟移動端那邊開發的控制項相互作用引起的坑。(關我毛事?)那個虧野loading控制項是移動端那邊用來判斷webview載入情況的,在網路請求跟數據請求時都會調用打開這個控制項,然而悲劇的是關閉這個控制項也就是 WebviewDidFinishLoad 函數卻必須是頁面有進行重載才會發起調用的,也就是說loading你是開了,但是我 單頁應用 怎麼來都是在一個頁面上操作,自然 不會重載 ,所以也就導致了那朵小菊花一直在轉,這也是為什麼強制刷新的話可以關閉掉loading控制項的原因。這個嘛安卓那邊不會有問題,所以應該是ios開發那邊的問題,就算loading也應該有個時長可以關閉,或者可以寫個介面通過webview的形式讓前端去手動調用關閉loading控制項,都是可以的。
4.es6對於一些老舊的安卓機型和瀏覽器的兼容問題
這個一開始還是比較頭痛的,畢竟是上了線才發現的問題,陸陸續續在後台收到一些安卓機的反饋,打開活動頁面一片空白。看了下大多是安卓4.4.2還有一些4.4以下的安卓機型。這尼瑪vuejs不是兼容到安卓4.4嗎?所以一開始以為是axios跟mint-ui的問題,但後面發現其實不是。主要原因是對es6兼容不夠到位,雖然vue-cli引入了babel對js語法進行降級,但是還是有些老舊的機型會發生各種各樣的問題,這里需要引入一個叫babel-polyfill的包。所以你只需只在你引入import vue之前 import babel-polyfill進來就可以了,主要是為了讓es6對個別機型做到兼容。
㈡ 安卓怎麼嵌入web本地網頁
第一步:
存放本地html文件:放在app/src/main/assets目錄下,一般來說Androidstudio項目下是沒有assets文件夾的,所以需要在app/src/main下新建一個文件夾,取名assets.如圖:
新建文件夾assets
2.第二步就在在你的xml布局文件中,假如webview元素,接著訪問本地的html文件,功能很簡單,代碼如下:
WebView webview = (WebView)findViewById(R.id.webview);
webview.loadUrl("file:///android_asset/normal.html");