Android 시스템에서 WebViewClient를 사용하여 점프 URL을 처리하는 방법
최근 코드에는 WebView와 많은 상호작용이 있습니다. 웹view는android의 브라우저 컨트롤러입니다. 주로 웹view가 어떻게 WebViewClient 클래스를 다시 불러와서 URL 불러오는 것을 제어하는지 소개합니다.
WebViewClient 사용
WebViewClinet 사용은 주로 WebViewClient의 상위 클래스를 계승하고 필요에 따라 그 방법을 다시 작성하여 WebView에서 구성합니다. 예시 코드는 다음과 같습니다.
webView = (WebView) findViewById(R.id.webview);
webView.setWebViewClient(new ExampleWebViewClient());
private class ExampleWebViewClient extends WebViewClient {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
}
}
WebViewClient 방법1. shouldOverrideUrlLoading(WebView view, String url)
공식 설명: 새 URL이 현재 WebView에 로드될 때 호스트 애플리케이션이 제어를 수행할 수 있는 기회를 제공합니다.If WebViewClient is not provided,by default WebView will ask Activity Manager to choose the proper handler for the url. If WebViewClient is provided, return true means the host application handles the url, while return false means the current WebView handles the url. This method is not called for requests using the POST "method".
새로운 URL이 현재 WebView에서 불러올 때, 이 방법은 URL 처리를 제어할 수 있는 기회를 제공합니다.WebView에 setWebViewClient가 없으면 기본 동작은 WebView에서 Activity Manager에게 적절한 Handler 처리 URL을 가져오라고 묻는 것입니다.만약 WebView가 setWebViewClient를 설정했다면true로 돌아가는 것은 현재 응용 프로그램으로 URL을 처리하고, false로 돌아가는 것은 현재 웹뷰로 URL을 처리합니다.만약 http 요청이 POST 방법이라면 이 방법은 호출되지 않을 것이다.
코드 예:
/**
* www.example.com url url webview
*/
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.indexOf("http://www.example.com") != -1) {
// url
view.stopLoading();
view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
return true;
}
return false;
}
2. shouleOverrideKeyEvent(WebView view, KeyEvent event)공식 주석: 호스트 응용 프로그램에 키 이벤트를 동기적으로 처리할 수 있는 기회를 주십시오.e.g. menu shortcut key events need to be filtered this way. If return true, WebView will not handle the key event. If return false, WebView will always handle the key event, so none of the super in the view chain will see the key event. The default behavior returns false.
버튼 이벤트를 비동기적으로 처리할 수 있는 기회를 현재 적용합니다.true로 돌아가면 WebView는 이 키 이벤트를 처리하지 않습니다.false로 돌아가면 WebView는 이 키 이벤트를 처리합니다.기본 반환은false입니다.
3. onPageStarted(WebView, Stringurl, Bitmap favicon) 및 onPageFinished(WebView, Stringurl)
공식 설명: 페이지가 로딩을 시작한 호스트 응용 프로그램에 알림을 보냅니다.This method is called once for each main frame load so a page with iframes or framesets will call onPageStarted one time for the main frame. This also means that onPageStarted will not be called when the contents of an embedded frame changes, i.e. clicking a link whose target is an iframe.
번역: 페이지가 불러오기 시작할 때 호출됩니다.단, 페이지가 끼워졌을 때 (예를 들어 iframe에 링크가 있는 경우) 이 방법은 호출되지 않습니다.(오늘 이런 상황에 부닥쳤습니다. onLoad Resource를 다시 불러와서 url 점프를 제어할 수 있습니다.)
공식 설명: 페이지가 로딩을 완료한 호스트 응용 프로그램에 알림.This method is called only for main frame. When onPageFinished() is called, the rendering picture may not be updated yet. To get the notification for the new Picture, use onNewPicture(WebView, Picture).
번역: 페이지 마운트가 끝날 때 호출됩니다.
코드 예:
//페이지 로드 시간 가져오기
private long startTime;
private long endTime;
private long spendTime;
@Override
public void onPageFinished(WebView view, String url) {
endTime = System.currentTimeMillis();
spendTime = endTime - startTime;
Toast.makeText(view.getContext(), "spend time is:" + spendTime, Toast.LENGTH_SHORT).show();
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
startTime = System.currentTimeMillis();
}
4. onLoadResource(WebView view, String url)공식 참고: 호스트 애플리케이션에 WebView가 지정된 URL에서 지정한 리소스를 로드할 것임을 알립니다.
번역: 프로그램 WebView에 지정한 URL의 자원을 불러올 것을 알립니다. 모든 자원(예를 들어 그림, 플러그인 URL, js, css 파일).(이 방법으로 iframe 플러그인 URL을 처리할 수 있습니다)
코드 예:
@Override
public void onLoadResource(WebView view, String url) {
if (url.indexOf("http://www.example.com") != -1 && view != null) {
view.stopLoading();
view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.