H5調(diào)用Android和ios原生方法(react)

混合開發(fā)中需要web需要和原生交互方式。

1、H5調(diào)用原生方法的方式

原生需要寫方法來讓H5調(diào)用,H5在window中獲取方法。
ios殼中方法全部放在webkit.messageHandlers對象中,前端調(diào)用只需要

/**
* funcName 為原生方法名 
* postMessage(null) 跨源傳遞數(shù)據(jù),沒有數(shù)據(jù),一定要寫null 
*/
webkit.messageHandlers.funcName.postMessage(null)

Android中調(diào)用方法,直接在window中調(diào)用安卓給的對象

/**
* android 為原生對象名
* add為android對象中的方法 
*/
const { android } = window;
android.add('')

2、原生給H5傳值

H5調(diào)用原生方法后,原生怎么回調(diào)給H5?
跟原生一樣,H5需要寫好方法,讓原生調(diào)用,這里調(diào)用就是原生直接調(diào)用了H5的方法,當(dāng)然這個(gè)方法是要全局的方法,在window對象中的。
在react中寫原生調(diào)用的方法,需要在調(diào)用的組件中componentDidMount里面添加方法:

componentDidMount() {
  // funcitonName 是原生回調(diào)使用的方法名
  window['funcitonName'] = this.funcitonName;
  ...
}
/**
* 原生調(diào)用后, H5做的事情...
* 注意, 如果這里用了this, 那么一定要注意這里的this,可能不是你想要的this
*/
funcitonName = (args) => {
  ... // something
}

3、H5判斷當(dāng)前系統(tǒng)

function getNavigatorOS() {
    const u = navigator.userAgent;
    // const app = navigator.appVersion; // 系統(tǒng)版本
    const isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; // android終端或者uc瀏覽器   
    const isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); // ios終端 
    if (isAndroid) {
        ... // something
    } else if (isiOS) {
        ... // something
    }
}

4、統(tǒng)一封裝方法,讓頁面調(diào)用原生方法更容易,更好維護(hù)

原生方法可能多個(gè)地方使用,每次都去判斷系統(tǒng),然后分別調(diào)用不同方法很麻煩,不是前端該有范兒。應(yīng)該在一個(gè)文件中統(tǒng)一處理,其他頁面只需要調(diào)用處理好的方法就好。
例如獲取當(dāng)前設(shè)備號,原生封裝好方法后,統(tǒng)一在一個(gè)文件中處理:

// deviceId 為安卓給的獲取設(shè)備號方法對象
const { webkit, deviceId } = window;

// 判斷設(shè)備系統(tǒng)
const appOS = getNavigatorOS(); 

/**
 * 獲取 設(shè)備ID,返回對應(yīng)的方法
 */
export function getDeviceId(){
    if(appOS === 1){
        return deviceId.deviceId()
    }else if(appOS === 2){
        return webkit.messageHandlers.deviceId.postMessage(null)
    }
}

這樣在其他頁面就可以直接使用getDeviceId就可以得到得到設(shè)備號,才不管你是哪個(gè)系統(tǒng)呢。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容