1. 程式人生 > >全域性變數、常量、共享資料、跨webview傳參的綜述

全域性變數、常量、共享資料、跨webview傳參的綜述

很多程式語言都有全域性變數,但js語言沒有。
HTML5+雖然也可以擴充套件類似plus.globle,但權衡後我們發現,新增類似的方案,不會對便利性有很大的提升,但對App的效能有負面影響,所以我們還是沒有提供全域性變數,但在本文中詳述其他共享資料的方法。

共享資料有幾種方法。

  1. localStorage
    localStorage是HTML5標準,可跨webview使用。
    是持久化儲存的,App關閉後也存在,除非js手動刪除。
    如果考慮持久化,可以使用localStorage
  2. 共享js檔案的全域性常量
    我們可以給每個HTML頁面都引入一個相同的js檔案,比如common.js,在裡面定義一個變數,var g = 0; 
    這個每個頁面的g都等於0。
    但這種方式處理的變數是不能跨webview同步的,比如a.html引入common.js後,重新給g賦值為1,那麼同樣引入common.js的b.html裡的g並不會同步更改為1。
    所以說這種方式只適合於共享常量。
  3. url傳參
    在web時代,頁面間傳參的主要方式是url後面加問號,掛引數。形如 b.html?g=0
    然後在b頁面裡通過js解析title來獲取值。
    這種方式問題很多,App開發不推薦使用這種方式。
    問題1是在某些Android手機上,應用的HTML資源必須從apk裡解壓出來放到sd卡里才能執行,否則就會報404找不到頁面。
    而解壓資源又影響第一次啟動的速度。(解壓資源的設定在manifest裡)
    問題2是b頁面在載入以後,a仍然要給b傳遞資料,此時就沒法用了。
  4. HTML5+的evalJS方法
    plus.webview物件有evalJS方法,可以在一個webview裡操作讓另一個webview執行一段js,這個方法不僅可用於傳遞引數,還可用於隨意的互相呼叫通訊。
    evalJS類似js標準的eval方法,把js程式碼變成字串傳遞過去,變數也變成值跟隨字串一起傳過去。
    具體參考:
    http://www.html5plus.org/doc/zh_cn/webview.html#plus.webview.WebviewObject.evalJS

  5. mui的自定義事件
    mui的自定義事件是對HTML5+的evalJS的一種簡化封裝。
    當開發者使用mui框架時,可以更簡單的跨頁傳遞和獲取引數。
    具體參考:
    http://ask.dcloud.net.cn/article/63
    6.其他
    方法其實還有很多,
    比如session.storage,在單頁時可用。
    比如通過io共享資料,比如json檔案或txt檔案;
    比如websql、indexedDB、plus.storage;
    比如在伺服器臨時存。。。