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?
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
atauWebviewClient 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方法:
Native中拿到数据后,执行:
webview.loadUrl(javascript:getUseID(userid););
H5中的
Cara Native memanggil H5, dalam analisis akhir, ia hanyalah satu perkara,getUseID
webview.loadUrl(javascript:yourFunc(data);
akan menghantar data ke H5 dan melaksanakanyourFunc
dalam H5 Kaedah iniPanggil 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 iniUniqueID
kepada pihak lain Selepas fungsi tersebut dilaksanakan, pihak yang satu lagi akan menghantar kembali pengecam unikUniqueID
dan data pulangandata
dan kemudian menggunakanUniqueID
ini. untuk mencari fungsi panggilanCallBack
, kemudian laksanakanCallBack(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.