javascript - Une question sur la communication client et front-end?
大家讲道理
大家讲道理 2017-05-16 13:27:34
0
1
610

Le client utilise WebViewClient类的shouldOverrideUrlLoadingméthodes pour gérer la communication entre le frontend et le client. Dans ce cas, comment le front-end connaît-il le rappel de traitement du client ?
La situation est la suivante :

  1. Le front-end envoie une adresse d'un protocole donné, par exemple pour obtenir l'utilisateur actueljsbridge://bridge/userid

  2. Le client capture cette charge et commence à effectuer des opérations, telles que l'écriture de valeurs sur le front-endjavaScript:window.userId=12121

window.location.href = "jsbridge://bridge/userid"

console.log(window.userId) //这样貌似拿不到userId

setTimeout(function() {
   console.log(window.userId) //这样就可以拿到了。
}, 1000)

Que devons-nous faire dans ce scénario ?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

répondre à tous(1)
Peter_Zhu

Je crois comprendre que pour comprendre JSBridge, vous devez en fin de compte comprendre trois choses. L'une est la façon dont H5 appelle Native, l'autre est la façon dont Native appelle H5, et la dernière est le rappel entre les deux.

  • Comment appeler Native en H5, les méthodes sur Internet sont toutes les mêmes, c'est-à-dire que lorsque WebView chargera la page H5, il appellera la méthode dans WebChromeClient ou WebviewClient code>, sélectionnez-en un, pour intercepter les données H5 et les transmettre à Native pour traitementWebChromeClient或者是WebviewClient中的方法,选取其中的一个,来截取H5的数据,交由Native处理

  • Native如何调用H5,归根结底就是一条,webview.loadUrl(javascript:yourFunc(data););会把数据传给H5并执行H5中的yourFunc这个方法

  • 两者之间的回调,即Native或者H5处理好对方的调用后,把结果返回给对方,供对方使用。本质就是把调用函数Callback使用时间戳或者其他的唯一标识通过Map组织起来,即Map(UniqueID,Callback),并把此唯一标示UniqueID传给对方函数,对方执行完毕后,会把这个唯一标示UniqueID和返回数据data传回来,然后通过这个UniqueID找到调用函数CallBack,然后执行CallBack(data)

从你的描述中可以知道,你现在是迷失在第二点上了,你需要在H5中写一个JS方法:

function getUseID(userid){
console.log(userid);
}

Native中拿到数据后,执行:

webview.loadUrl(javascript:getUseID(userid););

H5中的getUseID

Comment Native appelle H5, en dernière analyse, ce n'est qu'une chose, webview.loadUrl(javascript:yourFunc(data);); transmettra les données à H5 et exécutera yourFunc en H5 Cette méthode




Le rappel entre les deux signifie qu'une fois que Native ou H5 a traité l'appel de l'autre partie, il renvoie le résultat à l'autre partie pour qu'il l'utilise. L'essence est d'organiser la fonction d'appel Callback via Map en utilisant des horodatages ou d'autres identifiants uniques, c'est-à-dire Map (UniqueID, Callback), et de transmettre cet identifiant unique UniqueID au autre partie Une fois la fonction exécutée, l'autre partie renverra l'identifiant unique UniqueID et les données de retour data, puis utilisera ce UniqueID pour trouver la fonction appelante CallBack, puis exécutez CallBack(data)

  • Il ressort de votre description que vous êtes perdu dans le deuxième point. Vous devez écrire une méthode JS en H5 :

    . rrreee
  • Après avoir récupéré les données en Native, exécutez :
  • webview.loadUrl(javascript:getUseID(userid););

  • La méthode getUseID dans H5 sera appelée et exécutée, et les données seront reçues avec succès de Native
  • S'il s'agit d'un JSBridge complet, le troisième point ci-dessus doit être pris en considération.

  • Vous développez Android Hybrid, et vous avez besoin d'un JSBridge
pour vous donner une roue, écrit par le fantôme à grosse tête : 🎜https://github.com/JerryMissT...🎜Je vous recommande quelques blogs, ils sont toujours bien après les avoir lu🎜 🎜 🎜🎜http://www.cnblogs.com/dailc/...🎜🎜 🎜🎜http://blog.csdn.net/qq_23547...🎜🎜 🎜🎜http://zjutkz.net/2016/04/17/...🎜🎜 🎜
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!