Rumah > Soal Jawab > teks badan
Pelanggan menggunakan WebViewClient
类的shouldOverrideUrlLoading
kaedah untuk mengendalikan komunikasi antara bahagian hadapan dan pelanggan. Dalam kes ini, bagaimanakah bahagian hadapan mengetahui panggilan balik pemprosesan pelanggan?
Keadaannya adalah seperti berikut:
Hujung hadapan menghantar alamat protokol yang diberikan, seperti mendapatkan pengguna semasajsbridge://bridge/userid
Pelanggan menangkap beban ini dan mula melakukan operasi, seperti menulis nilai ke bahagian hadapanjavaScript:window.userId=12121
window.location.href = "jsbridge://bridge/userid"
console.log(window.userId) //这样貌似拿不到userId
setTimeout(function() {
console.log(window.userId) //这样就可以拿到了。
}, 1000)
Apakah yang perlu kita lakukan dalam senario ini?
天蓬老师2017-05-16 13:29:34
Pemahaman saya ialah untuk memahami JSBridge, anda akhirnya perlu memahami tiga perkara Satu ialah cara H5 memanggil Native, satu lagi ialah cara Native memanggil H5, dan yang terakhir ialah panggilan balik antara keduanya.
Cara untuk memanggil Native dalam H5, kaedah di Internet semuanya sama, iaitu apabila WebView memuatkan halaman H5, ia akan memanggil kaedah dalam WebChromeClient
atau WebviewClient kod>, pilih salah satu daripadanya, Untuk memintas data H5 dan menyerahkannya kepada Native untuk diproses
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);
akan menghantar data ke H5 dan melaksanakan yourFunc
dalam H5 Kaedah ini
Panggil balik antara kedua-duanya bermakna selepas Native atau H5 mengendalikan panggilan pihak yang satu lagi, ia mengembalikan hasilnya kepada pihak yang satu lagi untuk digunakan oleh pihak yang satu lagi. Intinya adalah untuk mengatur fungsi panggilan Panggilan Balik melalui Peta menggunakan cap masa atau pengecam unik lain, iaitu, Peta (UniqueID, Panggilan Balik)
dan hantar pengecam unik ini UniqueID
kepada pihak lain Selepas fungsi tersebut dilaksanakan, pihak yang satu lagi akan menghantar kembali pengecam unik UniqueID
dan data pulangan data
dan kemudian menggunakan UniqueID
ini. untuk mencari fungsi panggilan CallBack
, kemudian laksanakan CallBack(data)
Dapat dilihat dari penerangan anda bahawa anda tersesat di titik kedua Anda perlu menulis kaedah JS dalam H5:
rrreeewebview.loadUrl(javascript:getUseID(userid););
getUseID
dalam H5 akan dipanggil dan dilaksanakan, dan data akan berjaya diterima daripada NativeJika ia JSBridge yang lengkap, perkara ketiga di atas mesti diambil kira.