Maison > Questions et réponses > le corps du texte
Le client utilise WebViewClient
类的shouldOverrideUrlLoading
mé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 :
Le front-end envoie une adresse d'un protocole donné, par exemple pour obtenir l'utilisateur actueljsbridge://bridge/userid
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 ?
天蓬老师2017-05-16 13:29:34
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 traitement
WebChromeClient
或者是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
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 :
. rrreeewebview.loadUrl(javascript:getUseID(userid););
getUseID
dans H5 sera appelée et exécutée, et les données seront reçues avec succès de NativeS'il s'agit d'un JSBridge complet, le troisième point ci-dessus doit être pris en considération.