国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

移動端 h5和原生交互的方式

這篇具有很好參考價值的文章主要介紹了移動端 h5和原生交互的方式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、h5傳遞給原生WebView的數(shù)據(jù)協(xié)議

傳遞的是個json字符串:

{
? ? "id": "random_value",
? ? "action": "action_name",
? ? "callback": "function_name", ?// optional
? ? "data": {...} ?// optional
}

id:這次操作的id,回調(diào)時會再傳回來。因為交互有可能是異步的,對同一個接口調(diào)用多次時,回調(diào)時以id來區(qū)分是哪一次。id由js自己定義保證唯一即可,簡單的做法是使用Math.random()
action:操作名稱,取名應該能反映其意義,例如getIp(獲取ip地址)
callback:可選,操作完成后的js回調(diào)函數(shù)名。不用回調(diào)就不傳此參數(shù)
data:可選,某些操作才需要。app會解析data中的數(shù)據(jù)使用。

例如:h5調(diào)用原生的網(wǎng)絡請求可以這么定義

{
? ? ?"id":100,
? ? ?"action":"doRequest",
? ? ?"callback","onResponse"
? ? ?"data":{
? ? ? ? ?"method":"get",
? ? ? ? ?"url":"",
? ? ? ? ?"body":""
? ? ? ? ?"header":""
? ? ? ? ?"type":"noCache"
? ? ?}
}

二、原生WebView傳遞給h5的數(shù)據(jù)協(xié)議

原生WebView傳給h5的也是個json字符串:

{
? ? "id": "random_value"
? ? "action": "action_name",
? ? "platform": "android"
? ? "data": {...} ?
}


id:與傳給WebView的一致。
action:與傳給WebView的一致。如果各種操作都用同一個回調(diào)函數(shù),則可以此區(qū)分是哪個操作。
platform:平臺
data:操作結果對應的數(shù)據(jù),是原生提供給h5的具體數(shù)據(jù)

三、h5通過js的調(diào)用方式

注入的對象在android是全局變量,也即是window的成員變量,android這邊會提供一個統(tǒng)一的調(diào)用方法入口,叫postMessage,注入的對象名叫nativeCaller,調(diào)用方式如下:

function callNative(object) {
? if (window.nativeCaller) {
? ? window.nativeCaller.postMessage(JSON.stringify(object))
? } else {
? ? alert("此功能需要在原生WebView中使用!")
? }
}

四、Android端的處理方式

創(chuàng)建BaseJsHandler的子類,例如獲取原生設備信息的處理

public class DeviceInfoHandler extends BaseJsHandler {

? ? @Override
? ? public String action() {
? ? ? ? return "getDeviceInfo"; //對應h5請求數(shù)據(jù)中action
? ? }
? ? //data是h5請求數(shù)據(jù)的data節(jié)點,callback是h5的回調(diào)函數(shù)方法名
? ? @Override
? ? protected JSONObject handleMessage(JSONObject data, String callback) {
? ? ? ? //這里返回的json數(shù)據(jù)最終會被包裝到data節(jié)點內(nèi),該過程是框架完成的,無需關心.
? ? ? ? JSONObject toJson = new JSONObject();
? ? ? ? try {
? ? ? ? ? ? toJson.put("isWifi", NetworkUtils.isWifiAvailable());
? ? ? ? ? ? toJson.put("isNetworkAvailable", NetworkUtils.isNetworkAvailable());
? ? ? ? ? ? if (null != AppUtils.getPackageInfo()) {
? ? ? ? ? ? ? ? toJson.put("packageName", AppUtils.getPackageInfo().packageName);
? ? ? ? ? ? ? ? toJson.put("versionCode", AppUtils.getPackageInfo().versionCode);
? ? ? ? ? ? ? ? toJson.put("versionName", AppUtils.getPackageInfo().versionName);
? ? ? ? ? ? ? ? toJson.put("screenWidth", PixUtils.screenWidth());
? ? ? ? ? ? ? ? toJson.put("screenHeight", PixUtils.screenHeight());
? ? ? ? ? ? ? ? toJson.put("statusBarHeight", PixUtils.statusBarHeight());
? ? ? ? ? ? ? ? toJson.put("deviceId", AppUtils.getDevId());
? ? ? ? ? ? }
? ? ? ? } catch (JSONException e) {
? ? ? ? ? ? e.printStackTrace();
? ? ? ? }
? ? ? ? return toJson;
? ? }

}

? 然后調(diào)用WebViewInject類的addHandler方法注入該處理類

WebViewInject.getInstance().addHandler("getDeviceInfo", DeviceInfoHandler.class)

五、app與內(nèi)嵌h5網(wǎng)頁(vue)交互(相互調(diào)用js)&&傳值

如何傳值?
例如:內(nèi)嵌的h5發(fā)請求也token參數(shù),怎么拿到token?

方法一:拼接法。最簡單的,app鏈入h5地址時在后面拼接上所需的參數(shù)(token),可行但不夠安全。

方法二:暴露法。也比較簡單,就是ios開發(fā)和安卓開發(fā)將所需的值暴露在window,我們直接window.xxx既可以拿到。(這個比較簡便,調(diào)用APP底座方法)

方法三:使用的是WebViewJavascriptBridge,轉載參考https://blog.csdn.net/weixin_44696379/article/details/103327042

H5與原生app交互,需要WebViewJavascriptBridge,廢話不多直接上代碼,下面是項目中的封裝bridge.js的全部代碼(示例代碼為vue)

//iOS 交互聲明
function connectWebViewJavascriptBridgeIOS(callback) {
? if (window.WebViewJavascriptBridge) {
? ? return callback(window.WebViewJavascriptBridge)
? }
? if (window.WVJBCallbacks) {
? ? return window.WVJBCallbacks.push(callback)
? }
? window.WVJBCallbacks = [callback]
? let WVJBIframe = document.createElement('iframe')
? WVJBIframe.style.display = 'none'
? WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__'
? document.documentElement.appendChild(WVJBIframe)
? setTimeout(() => {
? ? document.documentElement.removeChild(WVJBIframe)
? }, 0)
}
?
?
//Android 交互聲明
function connectWebViewJavascriptBridgeANDROID(callback) {
? if (window.WebViewJavascriptBridge) {
? ? callback(WebViewJavascriptBridge);
? } else {
? ? document.addEventListener(
? ? ? "WebViewJavascriptBridgeReady",
? ? ? function () {
? ? ? ? callback(WebViewJavascriptBridge);
? ? ? },
? ? ? false
? ? );
? }
}
?
export default {
? //H5調(diào)用Native
? callhandler(name, data, callback) {
? ? //iOS的方法
? ? if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
? ? ? connectWebViewJavascriptBridgeIOS(function (bridge) {
? ? ? ? bridge.callHandler(name, data, callback)
? ? ? })
? ? }
? ? //Android方法
? ? if (/(Android)/i.test(navigator.userAgent)) {
? ? ? connectWebViewJavascriptBridgeANDROID(function (bridge) {
? ? ? ? bridge.callHandler(name, data, callback)
? ? ? })
? ? }
? },
? //Native調(diào)用H5
? registerhandler(name, callback) {
? ? //iOS的方法
? ? if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
? ? ? connectWebViewJavascriptBridgeIOS(function (bridge) {
? ? ? ? bridge.registerHandler(name, function (data, responseCallback) {
? ? ? ? ? callback(data, responseCallback)
? ? ? ? })
? ? ? })
? ? }
? ? //Android方法
? ? if (/(Android)/i.test(navigator.userAgent)) {
? ? ? connectWebViewJavascriptBridgeANDROID(function (bridge) {
? ? ? ? bridge.init(function (message, responseCallback) {
? ? ? ? ? if (responseCallback) {
? ? ? ? ? ? // responseCallback(data);
? ? ? ? ? }
? ? ? ? });
? ? ? ? bridge.registerHandler(name, function (data, responseCallback) {
? ? ? ? ? callback(data, responseCallback)
? ? ? ? })
? ? ? })
? ? }
? },
}

然后掛載到vue的原型方法上,在main.js中進行如下配置

import Bridge from "@/config/bridge.js" //此路徑根據(jù)實際bridge.js路徑填寫
Vue.prototype.$bridge = Bridge

完事兒,下面看一下在實際使用中的用法啊文章來源地址http://www.zghlxwxcb.cn/news/detail-822377.html

methods: {
?? ?// h5調(diào)用原生方法,testWebViewBridge為原生app定義的方法名。action為h5傳遞給原生app的參數(shù),可以為多個。data為原生app傳遞給h5參數(shù)
? ? goNative() {
? ? ? const vm = this;
? ? ? this.$bridge.callhandler(
? ? ? ? "testWebViewBridge",
? ? ? ? { action: "pick me" },
? ? ? ? data => {
? ? ? ? ? vm.ddd = data;
?
? ? ? ? ? // 處理返回數(shù)據(jù)
? ? ? ? }
? ? ? );
? ? },
? ? // h5注冊方法,供app調(diào)用
? ? iosToH5(){
?? ? ?
?? ?},
? },
?
? mounted() {
? ? // 原生app調(diào)用h5方法,iosToH5是methods中定義的方法名。
? ? const vm = this;
? ? this.$bridge.registerhandler("iosToH5", (data, responseCallback) => {
? ? ? // data是原生app傳遞給h5的參數(shù)
? ? ? vm.native_data = data;
? ? });
? }

到了這里,關于移動端 h5和原生交互的方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • App與H5交互的幾種方式

    1、直接調(diào)用App的定義的方法 首先我們需要判斷當前App的客戶端是Ios還是Android,針對不同的客戶端我們需要調(diào)用不同的方法。 2、調(diào)用方法獲取數(shù)據(jù) 這種方法和第一種方法一致,只不過是Ios與Android返回的值不同。 3、暴露方法給App調(diào)用傳值 在很多時候并不一定是H5去調(diào)用App,

    2024年02月11日
    瀏覽(24)
  • Vue.js uni-app 混合模式原生App webview與H5的交互

    Vue.js uni-app 混合模式原生App webview與H5的交互

    在現(xiàn)代移動應用開發(fā)中,原生App與H5頁面之間的交互已經(jīng)成為一個常見的需求。本文將介紹如何在Vue.js框架中實現(xiàn)原生App與H5頁面之間的數(shù)據(jù)傳遞和方法調(diào)用。我們將通過一個簡單的示例來展示如何實現(xiàn)這一功能。 效果圖如下: 首先,我們需要在Vue.js項目中引入原生App與H5頁面

    2024年02月16日
    瀏覽(22)
  • h5頁面如何與原生交互

    h5頁面如何與原生交互

    本文講述h5頁面跟原生通信,比如在app內(nèi),調(diào)用相機,獲取相冊內(nèi)的圖片,在app內(nèi)拉起微信小程序等等,h5頁面沒有這么多權限能夠直接調(diào)用移動端的原生能力,這個時候就需要與原生進行通訊,傳遞一個信號給原生這邊,然后原生直接調(diào)用手機端的能力。 下面分別講解h5與

    2024年02月16日
    瀏覽(16)
  • uniapp開發(fā)安卓App注意事項(HTML5+規(guī)范 plus調(diào)用安卓原生能力:廣播,掃描,相機等)

    使用安卓調(diào)試基座進行調(diào)試大大降低了uniapp開發(fā)安卓app的門檻 安卓開發(fā)經(jīng)常需要調(diào)用到安卓原生的api,例如廣播,掃碼,相機等等,uniapp內(nèi)置了App端的HTML5+規(guī)范,可以使用js直接調(diào)用豐富的原生能力。例如在安卓中調(diào)用原生的激光掃描能力: 該plus對象便是uniapp內(nèi)置的HTML5+規(guī)

    2024年03月19日
    瀏覽(26)
  • HTML5(H5)的前生今世

    HTML5(H5)的前生今世

    HTML5是一種用于構建和呈現(xiàn)網(wǎng)頁的最新標準。它是HTML(超文本標記語言)的第五個版本,于2014年由萬維網(wǎng)聯(lián)盟(W3C)正式推出。HTML5的前身可以追溯到互聯(lián)網(wǎng)爆發(fā)的早期,當時網(wǎng)頁設計師們面臨著許多限制和挑戰(zhàn)。 在互聯(lián)網(wǎng)的早期階段,網(wǎng)頁的設計和構建主要依賴于HTML和C

    2024年02月14日
    瀏覽(15)
  • h5(html5)+css3前端筆記二

    h5(html5)+css3前端筆記二

    一、表格標簽 表格的主要作用: 表格主要用于 顯示、展示數(shù)據(jù) ,因為它可以讓數(shù)據(jù)顯示的非常的規(guī)整,可讀性非常好。特別是后臺展示數(shù)據(jù)的時候,能夠熟練運用表格就顯得很重要。一個清爽簡約的表格能夠把繁雜的數(shù)據(jù)表現(xiàn)得很有條理。 1. table/table 用來定義表格的標簽

    2024年02月14日
    瀏覽(30)
  • Html5版音樂游戲制作及分享(H5音樂游戲)

    Html5版音樂游戲制作及分享(H5音樂游戲)

    這里實現(xiàn)了Html5版的音樂游戲的核心玩法。 游戲的制作借鑒了,很多經(jīng)典的音樂游戲玩法,通過簡單的代碼將音樂的節(jié)奏與操作相結合。 可以通過手機進行游戲,準確點擊下落時的目標,進行得分。 點擊試玩 游戲內(nèi)的下落數(shù)據(jù)是通過手打記錄的,可能有些偏差哈。 1、Html中

    2023年04月17日
    瀏覽(23)
  • Android與H5交互 -- 點擊H5跳轉到 Android原生 頁面 ,webview與h5(js)交互

    Android與H5交互 -- 點擊H5跳轉到 Android原生 頁面 ,webview與h5(js)交互

    Android與H5交互 app開發(fā)過程中,利用原生+h5模式來開發(fā)是比較常見的 下面案例演示的是:原生調(diào)起一個H5頁面,然后H5點擊跳轉到原生 WebViewActivity頁面 調(diào)用H5 ,點擊H5鏈接 跳轉到原生MainActivity頁面 注意 別忘了 !-- 添加網(wǎng)絡權限 -- 一、清單文件,增加的配置 data的數(shù)據(jù)就是H5

    2023年04月14日
    瀏覽(30)
  • HTML5:構建現(xiàn)代、交互式的Web應用

    HTML5作為最新版本的HTML標準,引入了許多令人興奮的特性和改進,使Web開發(fā)更加靈活和強大。本篇博客將圍繞HTML5的核心功能展開,包括語義化標簽、多媒體支持、表單增強、Canvas繪圖、地理定位、本地存儲等方面。我們將通過詳細的代碼示例和實用的技巧,幫助你全面掌握

    2024年02月12日
    瀏覽(15)
  • VUE html5-qrcode H5掃一掃功能

    官方文檔??html5-qrcode 安裝? ?npm i html5-qrcode 1、新建一個組件? 2、引入 3、獲取攝像權限在created調(diào)用 4、獲取掃碼內(nèi)容 5、必須在銷毀頁面前關閉掃碼功能否則會報錯?? could not start video source 6、在掃碼頁面引用組件 組件完整代碼 引用組件頁面

    2024年02月16日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包