柚子快報(bào)邀請(qǐng)碼778899分享:交互 Title
柚子快報(bào)邀請(qǐng)碼778899分享:交互 Title
其中wholeJS就是JS文件轉(zhuǎn)化而來(lái)的字符串,然后調(diào)用
webView.loadUrl("javascript: " + wholeJS);
1
就可以看到和之前一樣的效果。
方式2: 通過(guò)evaluateJavascript方法
相較于loadUrl,evaluateJavascript的優(yōu)勢(shì)在于異步加載,還可以將執(zhí)行JS代碼的結(jié)果帶回來(lái),我們以下面一個(gè)小例子來(lái)說(shuō)明。
我們?cè)趙eb頁(yè)面中聲明如下方法:
123456
然后我們注入js代碼調(diào)用這個(gè)函數(shù),并將121這個(gè)結(jié)果帶回來(lái)來(lái),在onPageFinished中調(diào)用以下代碼
webView.evaluateJavascript(“getUID()”, new ValueCallback() {
@Override
public void onReceiveValue(String value) {
Log.d(“CALLBACK”, value);
}
});
123456
結(jié)果如下
JS調(diào)用Native
JS調(diào)用Native是最常用也是最重要的方法,在實(shí)現(xiàn)上有兩種思路,一種是攔截schema,有兩種方式攔截,一種是注冊(cè)接口。我們依然以一個(gè)例子取說(shuō)明這個(gè)過(guò)程,也很簡(jiǎn)單,我們load一個(gè)在本地的頁(yè)面,頁(yè)面上只有一個(gè)按鈕如下圖,按下這個(gè)按鈕去調(diào)用原生的Toast方法。
方式1:攔截URL schema
URL schema是一種請(qǐng)求格式,用攔截URL schema的方式我就需要自定義一個(gè)URL schema,如jsbridge://jsbridge://webview?&arg1=hello&arg2=world,我們的html頁(yè)面如下
Title
JS 調(diào)用Native
1234567891011121314151617181920212223242526272829303132
我們需要到WebViewClient的shouldOverrideUrl去攔截,并解析參數(shù),代碼如下
@Override
public boolean shouldOverrideUrlLoading(WebView webView, String s) {
Uri uri = Uri.parse(s);
Log.d(“test112”, s);
if(uri.getScheme().startsWith(“jsbridge”)) {
String arg1 = uri.getQueryParameter(“arg1”);
String arg2 = uri.getQueryParameter(“arg2”);
String s1 = “JS調(diào)用Native,參數(shù)1:”+arg1+“參數(shù)2:”+arg2;
Toast.makeText(MainActivity.this, s1, Toast.LENGTH_LONG).show();
}
return true;
}
123456789101112
最后的結(jié)果如下圖
還有另一種攔截就是通過(guò)WebChromeClient 攔截web的prompt,過(guò)程類(lèi)似,這里就不再贅述。
方式2:注冊(cè)Javascript接口
首先創(chuàng)建一個(gè)管理接口的類(lèi)如下
public class AndroidToJS extends Object {
@JavascriptInterface
public void hello(String msg) {
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_LONG).show();
}
}
123456
然后通過(guò)addJavascriptInterface去注冊(cè)和映射接口如下,JS中就可以 test.函數(shù)名 調(diào)用函數(shù)
webView.addJavascriptInterface(new AndroidToJS(), “test”);
1
html頁(yè)面如下
Title
柚子快報(bào)邀請(qǐng)碼778899分享:交互 Title
參考閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀(guān)點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。