JS調用App方法及App調用JS方法


做App內嵌H5項目時,經常會遇到js與App的交互,最普遍的就是方法的互相調用,那么如何實現方法的互相調用呢?

 

寫在前面:

  如果只是小項目且后期擴大的可能性不大的時候,可以忽略,可如果是長期項目的話,那么就需要考慮以下一些問題了。

  1. 方法命名規范。

        如果考慮到以后會有大量的方法,那么規范化的命名就很重要了,規范化的命名,既保證了名字的唯一性又保證了代碼的可讀性方便開發過程,也方便后期維護。

     舉個栗子,  如果現在有一個方法,是關閉webview, js調用app的方法, 如果直接叫closePage, 那么根本看不出來是要調用App的方法,混亂且有可能被其他命名覆蓋,那么如果叫 JAMS__closePage ,即所有的js 與App的交互的方法都加 JAMS 那么就很容易分辨了,且不易重名。

       2.安全性。

    如果在你的App內能打開其他的網頁鏈接,那么這些接口的安全性也是需要考慮的,即保證在指定的webview或者授權的webview內這些方法才能被調用,這點很重要。

    第一種方法是app內判斷webview地址來源,來匹配對用方法的使用權,顯然這個每次添加新頁及方法的時候,App都需要修改授權列表。

    第二種方法是,App打開webview的時候,如果是自己的業務H5那么調用的時候可以傳入一個token,每次調用方法時都校驗token。

 

一, js調用App 方法

  假設方法名為  JAMS__mark

 

  android 系統:

    window.android.JAMS__mark(params)   // @params為傳入的參數, app內可以收到
 
  ios 系統:  
               
    window.webkit.messageHandlers.closePage.postMessage(params)   // @params為傳入的參數, app內可以收到

       

然后可以封裝一下 像這樣

export function JAMS__mark() {
    if (/android/i.test(navigator.userAgent)) {
        try {
            window.android.JAMS__mark(params)
        } catch (e) {
            console.log(e)
        }
    } else if (/ios|iphone|ipod|pad/i.test(navigator.userAgent)) {
        try {
            window.webkit.messageHandlers.JAMS__mark.postMessage(params)
        } catch (e) {
            console.log(e)
        }
    }
}

 

 

 

二、 App調用js方法

 

App調用js 方法需要js將方法掛載在window下,這樣App才能調用到方法,

假設方法名叫    JAMS__success

 

window.JAMS__success = function () {

  // do some thing

  // if need some params ,you can alse return it

  return params;

}

需要主要的是如果需要返回一些數據給App,那么這些數據不能夠通過異步來獲取,也不能夠有阻斷進程的語句如alert,否者,app將不能夠獲取到正確參數,而是得到 undefined,  例如在方法里加個alert('1'), 而 return 在 alert語句后。

 

(完)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM