Android WebViewブロックiframeタグ内部ジャンプ教程
最近のプロジェクトでは、ダイナミックな配置が必要です。バックグラウンドはiframeタグをネストしたコードを与えました。Androidでiframe内部のジャンプをブロックする必要があります。自分で処理します。
例えば、下はhtmlコードです。このiframeタグを入れ子にして、srcは住所をジャンプします。今はあなたがこのURLをクリックした時にブロックをします。自分で処理します。ジャンプではありません。
実現方法:
まず、あなたのWebViewはsetWebView Cientを要して、書き直します。
例えば、下はhtmlコードです。このiframeタグを入れ子にして、srcは住所をジャンプします。今はあなたがこのURLをクリックした時にブロックをします。自分で処理します。ジャンプではありません。
<html>
<iframe src="https://www.jb51.net/" frameborder='0' scrolling='no' width='100%' height='300'>
</iframe>
</html>
oh、私はまだiframeタグを初めて知ったのですが、普通のブロックh 5と似ていると思います。興味満々にコードを採用し始めました。しかし、いくらWebViewを配置しても、ShoruldOverrideUrlLoadingを書き直しても、iframeのアドレスをブロックできません。その後研(bai)究(du)して長い間、ついに阻止しました。実現方法:
まず、あなたのWebViewはsetWebView Cientを要して、書き直します。
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {} , setWebChromeClient, onCreateWindow , 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
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); //
settings.setDisplayZoomControls(false); //
settings.setDefaultTextEncodingName("utf-8"); //
settings.setUseWideViewPort(false); // WebView
settings.setLoadWithOverviewMode(true); //
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);//
webView.setOverScrollMode(View.OVER_SCROLL_NEVER); // WebView 、
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); //
// >= 19(SDK4.4) ,
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
settings.setLoadsImagesAutomatically(true); //
} 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(); //
}
@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タグの内部ジャンプ教程を小編として皆さんに共有しています。参考にしていただければと思います。どうぞよろしくお願いします。