您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關JavaScript和原生應用常用的數據交互方式是什么的內容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。
場景1
在原生app中經常會使用到H5頁面,比如說電商中的活動頁,一些電商中的詳情頁,等等...這些頁面都有一個特點,那就是在未來修改的可能性,和一次性的幾率特別的大。所以用H5的頁面是最睿智的一種選擇。
一旦使用了H5那么就少不了和原生開發的一些交互(Android, IOS)如下的方案能夠幫助你解決。
其實現原理是原生在js的window對象中注入一個js方法,以備原生應用進行處罰觸發,就和我們平時去調用onclick的方法一樣簡單。
js代碼:
// mobile/index.js 常用js 調用原生的方式都在這里體現。 export default { /** * 調用移動端方法 * * @param {*} {name, params, call} 移動端注入的方法名 | 參數 | 回調 */ callMoblieMethods({name, params, call}){ // 移動端安卓的環境 if(window.android) { // 移動端使用java所以不能直接解析json,只能解析字符串或者json字符串 window.android[name](JSON.stringify(params)); } // 移動端IOS的環境 if(window.webkit && window.webkit.messageHandlers) { window.webkit.messageHandlers[name].postMessage(params); } } }
調用方式
if(window.android || (window.webkit && window.webkit.messageHandlers.activityDetails)) { mobile.callMoblieMethods({ name: 'activityDetails', params: {activityId: item.act_id}}); }
這個判斷條件大家看起來可能很詭異,我測試過這各種機器的機型,安卓機window肯定是沒有的屬性,但是在IOS上他會自帶webkit屬性所以我們先判斷他是否有webkit屬性在判斷他是否有注入的方法名這樣他就能很好的調用這個方法了;
為了方便大家查找這里也附上移動端的代碼:
//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 #import <JavaScriptCore/JavaScriptCore.h> WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init]; [wkWebConfig.userContentController addScriptMessageHandler:self name:@"clinicDetails"]; [wkWebConfig.userContentController addScriptMessageHandler:self name:@"activityDetails"];
通過這個流程大家就能很方便的調用原生的方法了。
場景2
我們需要在短信中使用某個鏈接去打開原生應用如果沒有那么就會提示他去下載某個應用,首先原生的應用需要定義一個url鏈接以備前端程序員在瀏覽器中調用,先給大家看一下鏈接示例:
// IOS iOSStarClinic:// // Andriod yjjkyl://starclinic
短小精悍,你只需要調用這個就可以了
那么在js中要怎么做呢?
if(this.isIOS) { window.location.href = 'iOSStarClinic://';//與APP約定的一個協議URL } else { var state = null; try { state = window.open('yjjkyl://starclinic', '_blank');//與APP約定的一個協議URL } catch(e) {} if (state) { window.close(); } else { window.location.href = gbs.patientDownUrl; } }
先判斷一下當前是IOS還是安卓環境,其實現在的瀏覽器已經不能通過偏方(計時的方法)來解決檢查當前時候有沒有安裝應用了,因為瀏覽器會彈出提示框用戶確認才能跳轉所以用戶一旦不點擊確認那么瀏覽器就會進行跳轉!所以在當前頁應該要給用戶顯示一些內容以便用戶未打開應用的時候有其他的業務流程。
感謝各位的閱讀!關于JavaScript和原生應用常用的數據交互方式是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。