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 ?
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
ouWebviewClient 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方法:
Native中拿到数据后,执行:
webview.loadUrl(javascript:getUseID(userid););
H5中的
Comment Native appelle H5, en dernière analyse, ce n'est qu'une chose,getUseID
webview.loadUrl(javascript:yourFunc(data););
transmettra les données à H5 et exécuterayourFunc
en H5 Cette méthodeLe 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 uniqueUniqueID
au autre partie Une fois la fonction exécutée, l'autre partie renverra l'identifiant uniqueUniqueID
et les données de retourdata
, puis utilisera ceUniqueID
pour trouver la fonction appelanteCallBack
, puis exécutezCallBack(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.