小編給大家分享一下Android WebView攔截iframe標(biāo)簽內(nèi)部跳轉(zhuǎn)的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
泗洪網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)公司成立與2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。
Android是一種基于Linux內(nèi)核的自由及開(kāi)放源代碼的操作系統(tǒng),主要使用于移動(dòng)設(shè)備,如智能手機(jī)和平板電腦,由美國(guó)Google公司和開(kāi)放手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開(kāi)發(fā)。
最近項(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="https://www.jb51.net/" frameborder='0' scrolling='no' width='100%' height='300'> </iframe> </html>
oh,我還是第一次知道iframe標(biāo)簽,不過(guò)想著應(yīng)該和普通攔截h6差不多,興致勃勃的就開(kāi)始擼代碼了,但是無(wú)論怎么配置WebView,還是重寫(xiě) shouldOverrideUrlLoading ,就是攔截不了iframe里的網(wǎng)址。。。后來(lái)研(bai)究(du)了很久,終于攔截到了。
實(shí)現(xiàn)方法:
首先,你的WebView要 setWebViewClient ,重寫(xiě)
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {} 方法,然后setWebChromeClient,重寫(xiě)onCreateWindow方法,在里面創(chuàng)建新的WevView,加入到webView里,給新的webView setWebViewClient,再重寫(xiě)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("https://www.jb51.net")){ 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)站的證書(shū) } @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("//www.jb51.net")){ 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)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
網(wǎng)頁(yè)名稱:AndroidWebView攔截iframe標(biāo)簽內(nèi)部跳轉(zhuǎn)的示例分析
文章起源:http://bm7419.com/article8/jcseip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開(kāi)發(fā)、動(dòng)態(tài)網(wǎng)站、企業(yè)網(wǎng)站制作、手機(jī)網(wǎng)站建設(shè)、微信公眾號(hào)、域名注冊(cè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)