MUI:全域性變數、常量、共享資料、跨webview傳參的綜述
阿新 • • 發佈:2019-02-07
很多程式語言都有全域性變數,但js語言沒有。
HTML5+雖然也可以擴充套件類似plus.globle,但權衡後我們發現,新增類似的方案,不會對便利性有很大的提升,但對App的效能有負面影響,所以我們還是沒有提供全域性變數,但在本文中詳述其他共享資料的方法。
共享資料有幾種方法。
- localStorage
localStorage是HTML5標準,可跨webview使用。
是持久化儲存的,App關閉後也存在,除非js手動刪除。
如果考慮持久化,可以使用localStorage - 共享js檔案的全域性常量
我們可以給每個HTML頁面都引入一個相同的js檔案,比如common.js,在裡面定義一個變數,var g = 0;
這個每個頁面的g都等於0。
但這種方式處理的變數是不能跨webview同步的,比如a.html引入common.js後,重新給g賦值為1,那麼同樣引入common.js的b.html裡的g並不會同步更改為1。
所以說這種方式只適合於共享常量。 - url傳參
在web時代,頁面間傳參的主要方式是url後面加問號,掛引數。形如 b.html?g=0
然後在b頁面裡通過js解析title來獲取值。
這種方式問題很多,App開發不推薦使用這種方式。
問題1是在某些Android手機上,應用的HTML資源必須從apk裡解壓出來放到sd卡里才能執行,否則就會報404找不到頁面。
而解壓資源又影響第一次啟動的速度。(解壓資源的設定在manifest裡)
問題2是b頁面在載入以後,a仍然要給b傳遞資料,此時就沒法用了。 - HTML5+的evalJS方法
plus.webview物件有evalJS方法,可以在一個webview裡操作讓另一個webview執行一段js,這個方法不僅可用於傳遞引數,還可用於隨意的互相呼叫通訊。
evalJS類似js標準的eval方法,把js程式碼變成字串傳遞過去,變數也變成值跟隨字串一起傳過去。
具體參考: - mui的自定義事件
mui的自定義事件是對HTML5+的evalJS的一種簡化封裝。
當開發者使用mui框架時,可以更簡單的跨頁傳遞和獲取引數。
具體參考:
http://ask.dcloud.net.cn/article/63
6.其他
方法其實還有很多,
比如session.storage,在單頁時可用。
比如通過io共享資料,比如json檔案或txt檔案;
比如websql、indexedDB、plus.storage;
比如在伺服器臨時存。。。