摘要:一旦使用了那么就少不了和原生開發(fā)的一些交互如下的方案能夠幫助你解決。其實現(xiàn)原理是原生在的對象中注入一個方法,以備原生應(yīng)用進(jìn)行處罰觸發(fā),就和我們平時去調(diào)用的方法一樣簡單。代碼常用調(diào)用原生的方式都在這里體現(xiàn)。
場景1
在原生app中經(jīng)常會使用到H5頁面,比如說電商中的活動頁,一些電商中的詳情頁,等等...這些頁面都有一個特點(diǎn),那就是在未來修改的可能性,和一次性的幾率特別的大。所以用H5的頁面是最睿智的一種選擇。
一旦使用了H5那么就少不了和原生開發(fā)的一些交互(Android, IOS)如下的方案能夠幫助你解決。
其實現(xiàn)原理是原生在js的window對象中注入一個js方法,以備原生應(yīng)用進(jìn)行處罰觸發(fā),就和我們平時去調(diào)用onclick的方法一樣簡單。
js代碼:
// mobile/index.js 常用js 調(diào)用原生的方式都在這里體現(xiàn)。 export default { /** * 調(diào)用移動端方法 * * @param {*} {name, params, call} 移動端注入的方法名 | 參數(shù) | 回調(diào) */ callMoblieMethods({name, params, call}){ // 移動端安卓的環(huán)境 if(window.android) { // 移動端使用java所以不能直接解析json,只能解析字符串或者json字符串 window.android[name](JSON.stringify(params)); } // 移動端IOS的環(huán)境 if(window.webkit && window.webkit.messageHandlers) { window.webkit.messageHandlers[name].postMessage(params); } } }
調(diào)用方式
if(window.android || (window.webkit && window.webkit.messageHandlers.activityDetails)) { mobile.callMoblieMethods({ name: "activityDetails", params: {activityId: item.act_id}}); }
這個判斷條件大家看起來可能很詭異,我測試過這各種機(jī)器的機(jī)型,安卓機(jī)window肯定是沒有的屬性,但是在IOS上他會自帶webkit屬性所以我們先判斷他是否有webkit屬性在判斷他是否有注入的方法名這樣他就能很好的調(diào)用這個方法了;
為了方便大家查找這里也附上移動端的代碼:
//Android public class AndroidJavascriptInterface { Activity mActivity; public AndroidJavascriptInterface(Activity activity) { this.mActivity = activity; } //診所詳情 @JavascriptInterface public void clinicDetails(String jsonData) { Log.i("znh", "H5-JS-診所詳情"); Intent intent = new Intent(mActivity, OutPatientActivity.class); Bundle bundle = new Bundle(); bundle.putString(Constants.CLINIC_ID, GsonUtil.getJSONObjectKeyVal(jsonData, "clinicId")); intent.putExtras(bundle); mActivity.startActivity(intent); } //活動詳情 @JavascriptInterface public void activityDetails(String jsonData) { Log.i("znh", "H5-JS-活動詳情"); Intent intent = new Intent(mActivity, ActivityDetailActivity.class); Bundle bundle = new Bundle(); bundle.putString("id", GsonUtil.getJSONObjectKeyVal(jsonData, "activityId")); intent.putExtras(bundle); mActivity.startActivity(intent); } } //IOS #importWKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init]; [wkWebConfig.userContentController addScriptMessageHandler:self name:@"clinicDetails"]; [wkWebConfig.userContentController addScriptMessageHandler:self name:@"activityDetails"];
通過這個流程大家就能很方便的調(diào)用原生的方法了。
場景2我們需要在短信中使用某個鏈接去打開原生應(yīng)用如果沒有那么就會提示他去下載某個應(yīng)用,首先原生的應(yīng)用需要定義一個url鏈接以備前端程序員在瀏覽器中調(diào)用,先給大家看一下鏈接示例:
// IOS iOSStarClinic:// // Andriod yjjkyl://starclinic
短小精悍,你只需要調(diào)用這個就可以了
那么在js中要怎么做呢?
if(this.isIOS) { window.location.href = "iOSStarClinic://";//與APP約定的一個協(xié)議URL } else { var state = null; try { state = window.open("yjjkyl://starclinic", "_blank");//與APP約定的一個協(xié)議URL } catch(e) {} if (state) { window.close(); } else { window.location.href = gbs.patientDownUrl; } }
先判斷一下當(dāng)前是IOS還是安卓環(huán)境,其實現(xiàn)在的瀏覽器已經(jīng)不能通過偏方(計時的方法)來解決檢查當(dāng)前時候有沒有安裝應(yīng)用了,因為瀏覽器會彈出提示框用戶確認(rèn)才能跳轉(zhuǎn)所以用戶一旦不點(diǎn)擊確認(rèn)那么瀏覽器就會進(jìn)行跳轉(zhuǎn)!所以在當(dāng)前頁應(yīng)該要給用戶顯示一些內(nèi)容以便用戶未打開應(yīng)用的時候有其他的業(yè)務(wù)流程。
-完-
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/99116.html
摘要:歡迎使用中文文檔架構(gòu)概覽是網(wǎng)易項目團(tuán)隊開發(fā)的一個基于進(jìn)行開發(fā)的應(yīng)用層框架,提供了一個輕量級的容器來編寫簡單可維護(hù)的。 JavaScript 可以……嘛,不就是操作一下 DOM,可以讓元素飛來飛去嗎JavaScript 是……不就是用 jQuery 讓網(wǎng)頁動起來,頂多就是再用用 Ajax 和后端進(jìn)行一下數(shù)據(jù)交換嗎JavaScript 是一門……最討厭和鄙視這種弱類型不需要編譯的腳本語言...
摘要:后續(xù)我們還會增加一些實戰(zhàn)類的移動開發(fā)案例,歡迎關(guān)注專欄。進(jìn)入官網(wǎng)新版預(yù)覽在線預(yù)覽需要使用開啟設(shè)備模擬,效果更佳。 前言 之前寫過一篇 2018開發(fā)最快的Webapp框架--BUI交互框架 ,如果你還沒看過,可以簡單看一下,主要介紹了BUI的基本功能,有多少控件,以及實現(xiàn)的思路,BUI 1.5版本以后變化很大,統(tǒng)一新的風(fēng)格,新的規(guī)范750,新增基于Dom的數(shù)據(jù)驅(qū)動,完善了頁面的生命周期等...
摘要:原生應(yīng)用是一個基于引擎的運(yùn)行環(huán)境使用了一個事件驅(qū)動非阻塞式的模型,使其輕量又高效的包管理器,是全球最大的開源庫生態(tài)系統(tǒng)本文主要介紹構(gòu)建一個應(yīng)用的基本步驟和模塊,并假定你已經(jīng)對有一定的了解本文引用部分代碼作為例子,如果希望參看全部源碼,歡迎去 原生 Node.js 應(yīng)用 Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運(yùn)行環(huán)境Node.js 使用了一個事件驅(qū)...
閱讀 1615·2021-11-22 09:34
閱讀 1698·2019-08-29 16:36
閱讀 2679·2019-08-29 15:43
閱讀 3123·2019-08-29 13:57
閱讀 1307·2019-08-28 18:05
閱讀 1888·2019-08-26 18:26
閱讀 3256·2019-08-26 10:39
閱讀 3469·2019-08-23 18:40