Android WebView攔截iframe標(biāo)簽內(nèi)部跳轉(zhuǎn)教程
最近項(xiàng)目里有個(gè)廣告位需要?jiǎng)討B(tài)配置,后臺(tái)給了一段 html 嵌套iframe標(biāo)簽的代碼,需要Android攔截iframe內(nèi)部的跳轉(zhuǎn),自己做處理。
比如,下面是一段html代碼,嵌套這iframe標(biāo)簽,src就是跳轉(zhuǎn)地址,我現(xiàn)在就要當(dāng)你點(diǎn)擊該網(wǎng)址的時(shí)候做攔截,自己做處理而不是跳轉(zhuǎn)。
<html> <iframe src="http://www.dbjr.com.cn/" frameborder='0' scrolling='no' width='100%' height='300'> </iframe> </html>
oh,我還是第一次知道iframe標(biāo)簽,不過想著應(yīng)該和普通攔截h5差不多,興致勃勃的就開始擼代碼了,但是無論怎么配置WebView,還是重寫 shouldOverrideUrlLoading ,就是攔截不了iframe里的網(wǎng)址。。。后來研(bai)究(du)了很久,終于攔截到了。
實(shí)現(xiàn)方法:
首先,你的WebView要 setWebViewClient ,重寫
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {} 方法,然后setWebChromeClient,重寫onCreateWindow方法,在里面創(chuàng)建新的WevView,加入到webView里,給新的webView setWebViewClient,再重寫shouldVeerrideUrlLoading方法,在這里攔截。 webView.setWebChromeClient(new WebChromeClient(){ @Override public boolean onCreateWindow(WebView webView, boolean isDialog, boolean isUserGesture, Message resultMsg) { WebView newWebView = new WebView(getActivity()); webView.addView(newWebView); WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; transport.setWebView(newWebView); resultMsg.sendToTarget(); newWebView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView webView, String url) { //TODO 在這里實(shí)現(xiàn)你的攔截方法 if (url.contains("http://www.dbjr.com.cn")){ toast("攔截到了" + url); Intent intent = new Intent(getActivity(), CommonWebViewActivity.class); intent.putExtra("url",url); startActivity(intent); }else { webView.loadUrl(url); } return true; } }); return true; } });
完整的代碼如下:
private void initWebView(WebView webView) { //啟用支持javascript WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); settings.setJavaScriptCanOpenWindowsAutomatically(true); settings.setSupportZoom(false); //支持縮放 settings.setBuiltInZoomControls(false); //支持手勢(shì)縮放 settings.setDisplayZoomControls(false); //是否顯示縮放按鈕 settings.setDefaultTextEncodingName("utf-8"); //設(shè)置文本編碼 settings.setUseWideViewPort(false); //將圖片調(diào)整到適合WebView的大小 settings.setLoadWithOverviewMode(true); //自適應(yīng)屏幕 settings.setDomStorageEnabled(true); settings.setSaveFormData(true); settings.setSupportMultipleWindows(true); settings.setAppCacheEnabled(true); settings.setPluginState(WebSettings.PluginState.ON);//支持插件 settings.setCacheMode(WebSettings.LOAD_NO_CACHE); //不適用緩存 settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);//支持內(nèi)容重新布局 webView.setOverScrollMode(View.OVER_SCROLL_NEVER); // 取消WebView中滾動(dòng)或拖動(dòng)到頂部、底部時(shí)的陰影 webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); // 取消滾動(dòng)條白邊效果 // >= 19(SDK4.4)啟動(dòng)硬件加速,否則啟動(dòng)軟件加速 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { webView.setLayerType(View.LAYER_TYPE_HARDWARE, null); settings.setLoadsImagesAutomatically(true); //支持自動(dòng)加載圖片 } else { webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); settings.setLoadsImagesAutomatically(false); } webView.setWebViewClient(new WebViewClient() { @Override public void onLoadResource(WebView view, String url) { super.onLoadResource(view, url); Log.w("webView==onLoadResource===url=" + url); } @Override public void onReceivedSslError(WebView webView, SslErrorHandler sslErrorHandler, SslError sslError) { sslErrorHandler.proceed(); // 接受所有網(wǎng)站的證書 } @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { if (request.getUrl().toString().contains("http://www.baidu.com")){ toast("攔截到了baidu"); }else { webView.loadUrl(request.getUrl().toString()); } return true; } }); webView.setWebChromeClient(new WebChromeClient(){ @Override public boolean onCreateWindow(WebView webView, boolean isDialog, boolean isUserGesture, Message resultMsg) { WebView newWebView = new WebView(getActivity()); webView.addView(newWebView); WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj; transport.setWebView(newWebView); resultMsg.sendToTarget(); newWebView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView webView, String url) { if (url.contains("http://www.dbjr.com.cn")){ toast("攔截到了" + url); Intent intent = new Intent(getActivity(), CommonWebViewActivity.class); intent.putExtra("url",url); startActivity(intent); }else { webView.loadUrl(url); } return true; } }); return true; } }); }
以上這篇Android WebView攔截iframe標(biāo)簽內(nèi)部跳轉(zhuǎn)教程就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Android 中 WebView 的基本用法詳解
- 詳解Android WebView監(jiān)聽console錯(cuò)誤信息
- Android webView如何輸出自定義網(wǎng)頁
- 在Android環(huán)境下WebView中攔截所有請(qǐng)求并替換URL示例詳解
- 解決Android webview設(shè)置cookie和cookie丟失的問題
- Android中webView加載H5綁定cookie實(shí)例
- Android WebView通過動(dòng)態(tài)的修改js去攔截post請(qǐng)求參數(shù)實(shí)例
- Android webview注入JS代碼 修改網(wǎng)頁內(nèi)容操作
- Android實(shí)現(xiàn)WebView點(diǎn)擊攔截跳轉(zhuǎn)原生
- Android WebView userAgent 設(shè)置為桌面UA實(shí)例
- Android中的webview監(jiān)聽每次URL變化實(shí)例
- Android 解決WebView多進(jìn)程崩潰的方法
相關(guān)文章
Android仿微信照片選擇器實(shí)現(xiàn)預(yù)覽查看圖片
這篇文章主要介紹了Android仿微信照片選擇器實(shí)現(xiàn)預(yù)覽查看圖片的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-01-01Android仿美團(tuán)淘寶實(shí)現(xiàn)多級(jí)下拉列表菜單功能
這篇文章主要介紹了Android仿美團(tuán)淘寶實(shí)現(xiàn)多級(jí)下拉列表菜單功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2017-01-01Android編程之手機(jī)壁紙WallPaper設(shè)置方法示例
這篇文章主要介紹了Android編程之手機(jī)壁紙WallPaper設(shè)置方法,結(jié)合實(shí)例形式分析了Android手機(jī)壁紙WallPaper的相關(guān)設(shè)置與使用技巧,需要的朋友可以參考下2017-08-08Android使用ViewPager實(shí)現(xiàn)左右無限滑動(dòng)
這篇文章主要為大家詳細(xì)介紹了Android使用ViewPager實(shí)現(xiàn)左右無限滑動(dòng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05Flutter實(shí)現(xiàn)抽屜動(dòng)畫
這篇文章主要為大家詳細(xì)介紹了Flutter實(shí)現(xiàn)抽屜動(dòng)畫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03android中ViewPager結(jié)合Fragment進(jìn)行無限滑動(dòng)
本篇文章中主要介紹了android中ViewPager結(jié)合Fragment進(jìn)行無限滑動(dòng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03Android應(yīng)用創(chuàng)建多個(gè)快捷方式
本文主要介紹Android 生成多個(gè)快捷方式,這里提供代碼實(shí)例,詳細(xì)講解生成多個(gè)快捷方式的實(shí)現(xiàn)方法,有需要的朋友可以參考下2016-07-07