Android WebView iframe 탭 내부 전환 차단 튜 토리 얼
예 를 들 어 아래 는 html 코드 입 니 다.이 iframe 라벨 을 끼 워 넣 으 면 src 는 주 소 를 뛰 어 넘 는 것 입 니 다.저 는 지금 이 사 이 트 를 클릭 할 때 차단 을 하고 뛰 어 넘 는 것 이 아니 라 스스로 처리 하 겠 습 니 다.
<html>
<iframe src="https://www.jb51.net/" frameborder='0' scrolling='no' width='100%' height='300'>
</iframe>
</html>
oh,나 는 iframe 라벨 을 처음 알 았 습 니 다.그러나 일반 차단 h5 와 차이 가 많 지 않 을 것 이 라 고 생각 하여 흥미진진 하 게 코드 를 훑 기 시 작 했 습 니 다.그러나 WebView 를 어떻게 설정 하 든 shouldOverrideUrl Loading 을 다시 쓰 든 iframe 의 주 소 를 차단 할 수 없습니다.나중에 연구 한 지 오래 되 어 마침내 차단 되 었 다.실현 방법:
우선,당신 의 WebView 는 setWebView Client 를 다시 써 야 합 니 다.
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;
}
});
}
이상 의 안 드 로 이 드 웹 뷰 차단 iframe 태그 내부 점프 튜 토리 얼 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.참고 하 시 기 를 바 랍 니 다.여러분 들 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.