柚子快報(bào)激活碼778899分享:交互 架構(gòu) Title
柚子快報(bào)激活碼778899分享:交互 架構(gòu) Title
12345
我還需要設(shè)置WebSettings,WebViewClient和WebChromeClient,其他配置參考第一篇文章,這里就不過(guò)多闡述了
WebSettings webSettings = webView.getSettings();
webView.setWebChromeClient(new WebChromeClient());
webSettings.setJavaScriptEnabled(true)
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webView.setWebViewClient(new myWebVliewClient());
12345
然后在WebClient的OnPageStarted中添加如下
webView.loadUrl(“javascript: alert(‘Native注入的JS’)”);
1
可以注意到我們上面的圖片的背景是白色的,其實(shí)我們load是http://www.baidu.com, 因?yàn)槲覀冊(cè)趏nPageStarted中調(diào)用,當(dāng)時(shí)資源還沒(méi)有加載,所以背景是白色的,而且彈窗會(huì)阻塞資源的加載,不按取消頁(yè)面就無(wú)法繼續(xù)加載下去,會(huì)被阻塞在這里,所以對(duì)于注入的時(shí)機(jī)根據(jù)具體需求而定。
上面例子是非常簡(jiǎn)單的JS,如果是復(fù)雜的JS文件我們又該如何處理呢,有以下方法,其中我將test.js文件放在了Assets文件夾下,代碼如下
InputStreamReader isr = null;
try {
isr = new InputStreamReader(this.getAssets().open(“test.js”), “UTF-8”);
BufferedReader bf = new BufferedReader(isr);
String content = “”;
StringBuilder sb = new StringBuilder();
while (content != null) {
content = bf.readLine();
if (content == null) {
break;
}
sb.append(content.trim());
}
bf.close();
wholeJS = sb.toString();
} catch (IOException e) {
e.printStackTrace();
}
123456789101112131415161718
其中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é)果如下圖
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過(guò),也去過(guò)華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。
深知大多數(shù)前端工程師,想要提升技能,往往是自己摸索成長(zhǎng)或者是報(bào)班學(xué)習(xí),但對(duì)于培訓(xùn)機(jī)構(gòu)動(dòng)則幾千的學(xué)費(fèi),著實(shí)壓力不小。自己不成體系的自學(xué)效果低效又漫長(zhǎng),而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年Web前端開(kāi)發(fā)全套學(xué)習(xí)資料》,初衷也很簡(jiǎn)單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時(shí)減輕大家的負(fù)擔(dān)。
既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗(yàn)的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上前端開(kāi)發(fā)知識(shí)點(diǎn),真正體系化!
由于文件比較大,這里只是將部分目錄截圖出來(lái),每個(gè)節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻,并且會(huì)持續(xù)更新!
如果你覺(jué)得這些內(nèi)容對(duì)你有幫助,可以掃碼獲?。。。▊渥ⅲ呵岸耍?/p>
更多面試題
**《350頁(yè)前端校招面試題精編解析大全》**內(nèi)容大綱主要包括 HTML,CSS,前端基礎(chǔ),前端核心,前端進(jìn)階,移動(dòng)端開(kāi)發(fā),計(jì)算機(jī)基礎(chǔ),算法與數(shù)據(jù)結(jié)構(gòu),項(xiàng)目,職業(yè)發(fā)展等等
資料獲取方式:點(diǎn)擊藍(lán)色傳送門(mén)獲取
筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻,并且會(huì)持續(xù)更新!**
如果你覺(jué)得這些內(nèi)容對(duì)你有幫助,可以掃碼獲取?。。▊渥ⅲ呵岸耍?/p>
更多面試題
**《350頁(yè)前端校招面試題精編解析大全》**內(nèi)容大綱主要包括 HTML,CSS,前端基礎(chǔ),前端核心,前端進(jìn)階,移動(dòng)端開(kāi)發(fā),計(jì)算機(jī)基礎(chǔ),算法與數(shù)據(jù)結(jié)構(gòu),項(xiàng)目,職業(yè)發(fā)展等等
資料獲取方式:點(diǎn)擊藍(lán)色傳送門(mén)獲取
[外鏈圖片轉(zhuǎn)存中…(img-2d9vbeen-1712546522666)]
柚子快報(bào)激活碼778899分享:交互 架構(gòu) Title
好文鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。