programing

setWebViewClient와 setWebChrom Client의 차이점은 무엇입니까?

cafebook 2023. 9. 25. 23:06
반응형

setWebViewClient와 setWebChrom Client의 차이점은 무엇입니까?

죠와 ?setWebViewClientsetWebChromeClient안드로이드에서?

소스 코드에서:

// Instance of WebViewClient that is the client callback.
private volatile WebViewClient mWebViewClient;
// Instance of WebChromeClient for handling all chrome functions.
private volatile WebChromeClient mWebChromeClient;

// SOME OTHER SUTFFF.......

/**
 * Set the WebViewClient.
 * @param client An implementation of WebViewClient.
 */
public void setWebViewClient(WebViewClient client) {
    mWebViewClient = client;
}

/**
 * Set the WebChromeClient.
 * @param client An implementation of WebChromeClient.
 */
public void setWebChromeClient(WebChromeClient client) {
    mWebChromeClient = client;
}

WebChromeClient를 사용하면 자바스크립트 대화상자, 파비콘, 제목 및 진행 상황을 처리할 수 있습니다.다음 예를 살펴봅니다.WebView에 경보() 지원 추가

언뜻 보기에 WebViewClientWebChromeClient 사이에는 너무 많은 차이점이 있습니다.그러나 기본적으로, 너무 많은 기능을 필요로 하지 않고 HTML을 렌더링하는 웹뷰를 개발하는 경우, 당신은 그냥 a를 사용할 수 있습니다.WebViewClient하려면 ., 하려면() 을(를) 를 WebChromeClient) 및 object()를 하고,onReceivedIcon(WebView view, Bitmap icon).

대부분의 경우, 그런 것들에 대해 걱정하고 싶지 않다면...그냥 이렇게 하면 됩니다.

webView= (WebView) findViewById(R.id.webview); 
webView.setWebChromeClient(new WebChromeClient()); 
webView.setWebViewClient(new WebViewClient()); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.loadUrl(url); 

그리고 웹뷰는 (이론적으로) 안드로이드 네이티브 브라우저로 구현된 모든 기능을 가지고 있습니다.

저는 이 질문이 좀 더 자세한 내용이 필요하다고 생각합니다.제 대답은 Android Programming, The Big Nerd Ranch Guide (2판)에서 영감을 얻었습니다.

WebView에서는 기본적으로 JavaScript가 해제되어 있습니다.항상 켜져 있어야 하는 것은 아니지만 일부 앱에서는 이를 사용해야 할 수도 있습니다.

URL 로드는 웹뷰를 구성한 후에 해야 하므로 마지막으로 해야 합니다.다를 .getSettings()를 얻고합니다.WebSettings.setJavaScriptEnabled(true)은 웹 보기를 수정할 수 세 중 첫 웹 설정은 웹 보기를 수정할 수 있는 세 가지 방법 중 첫 번째 방법입니다.사용자 에이전트 문자열, 텍스트 크기 등 설정할 수 있는 다양한 속성이 있습니다.

그런 다음 WebView Client를 구성합니다.WebViewClient는 이벤트 인터페이스입니다.WebViewClient를 직접 구현하여 렌더링 이벤트에 응답할 수 있습니다.예를 들어, 렌더러가 특정 URL에서 이미지를 로드하기 시작하는 시점을 감지하거나 서버에 POST 요청을 다시 제출할지 여부를 결정할 수 있습니다.

WebViewClient에는 재정의할 수 있는 여러 가지 방법이 있지만 대부분은 처리하지 않습니다.그러나 기본 WebViewClient 구현을 바꿀 필요가 있습니다.shouldOverrideUrlLoading(WebView, String)이 새될 때 이 메서드는 링크를 누르는 것과 같이 WebView에 새 URL이 로드될 때 발생할 작업을 결정합니다.만약 당신이 true를 반환한다면, 당신은 "이 URL을 처리하지 마십시오. 제가 직접 처리합니다."라고 말하는 것입니다.만약 당신이 false를 반환한다면, 당신은 "어서 이 URL, WebView를 로드하라, 나는 그것을 가지고 아무것도 하지 않을 것이다"라고 말하는 것입니다.

기본 구현은 이전과 마찬가지로 URL을 사용하여 암시적 의도를 실행합니다.하지만 지금은 심각한 문제가 될 것입니다.일부 웹 응용 프로그램에서 가장 먼저 수행하는 작업은 웹 사이트의 모바일 버전으로 리디렉션하는 것입니다.기본 WebViewClient를 사용하면 사용자의 기본 웹 브라우저로 즉시 전송됩니다.이것은 단지 당신이 피하려는 것입니다.해결 방법은 간단합니다. 기본 구현을 무시하고 false만 반환하면 됩니다.

WebChromeClient를 사용하여 정리하세요 웹뷰를 만드는 데 시간이 걸리므로 진행 표시줄을 추가하고 로드된 페이지의 제목과 함께 도구 모음의 자막을 업데이트하여 정리해 보겠습니다.

ProgressBar를 연결하려면 WebView에서 두 번째 콜백을 사용합니다.WebChromeClient.

WebViewClient는 렌더링 이벤트에 응답하기 위한 인터페이스이며 WebChromeClient는 브라우저 주변의 크롬 요소를 변경해야 하는 이벤트에 응답하기 위한 이벤트 인터페이스입니다.여기에는 자바스크립트 알림, 파비콘, 로드 진행률 및 현재 페이지 제목에 대한 업데이트가 포함됩니다.

연결합니다.onCreateView(…). WebChromeClient를 사용하여 정리 진행 업데이트와 제목 업데이트는 각자의 콜백 방식을 가지고 있습니다.onProgressChanged(WebView, int)그리고.onReceivedTitle(WebView, String). 당신이 받는 진행상황onProgressChanged(WebView, int)는 0부터 100까지의 정수입니다.100이면 페이지 로드가 완료된 것을 알 수 있으므로 Progress Bar의 가시성을 다음으로 설정하여 숨깁니다.View.GONE.

면책 사항:이 정보는 Android Programming에서 가져온 것입니다.저자들의 허락을 받은 빅 너드 목장 가이드.이 책에 대한 자세한 정보나 사본을 구입하려면 bignerdranch.com 을 방문하십시오.

WebViewClient는 다음과 같은 콜백 방법을 제공하며, 이를 통해 다음과 같은 방법을 간섭할 수 있습니다.WebView다음 내용으로 전환합니다.

void doUpdateVisitedHistory (WebView view, String url, boolean isReload)
void onFormResubmission (WebView view, Message dontResend, Message resend)
void onLoadResource (WebView view, String url)
void onPageCommitVisible (WebView view, String url)
void onPageFinished (WebView view, String url)
void onPageStarted (WebView view, String url, Bitmap favicon)
void onReceivedClientCertRequest (WebView view, ClientCertRequest request)
void onReceivedError (WebView view, int errorCode, String description, String failingUrl)
void onReceivedError (WebView view, WebResourceRequest request, WebResourceError error)
void onReceivedHttpAuthRequest (WebView view, HttpAuthHandler handler, String host, String realm)
void onReceivedHttpError (WebView view, WebResourceRequest request, WebResourceResponse errorResponse)
void onReceivedLoginRequest (WebView view, String realm, String account, String args)
void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error)
boolean onRenderProcessGone (WebView view, RenderProcessGoneDetail detail)
void onSafeBrowsingHit (WebView view, WebResourceRequest request, int threatType, SafeBrowsingResponse callback)
void onScaleChanged (WebView view, float oldScale, float newScale)
void onTooManyRedirects (WebView view, Message cancelMsg, Message continueMsg)
void onUnhandledKeyEvent (WebView view, KeyEvent event)
WebResourceResponse shouldInterceptRequest (WebView view, WebResourceRequest request)
WebResourceResponse shouldInterceptRequest (WebView view, String url)
boolean shouldOverrideKeyEvent (WebView view, KeyEvent event)
boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request)
boolean shouldOverrideUrlLoading (WebView view, String url)

WebChromeClient는 다음과 같은 콜백 방법을 제공합니다.Activity아니면Fragment의 환경을 업데이트 할 수 있습니다.WebView.

Bitmap getDefaultVideoPoster ()
View getVideoLoadingProgressView ()
void getVisitedHistory (ValueCallback<String[]> callback)
void onCloseWindow (WebView window)
boolean onConsoleMessage (ConsoleMessage consoleMessage)
void onConsoleMessage (String message, int lineNumber, String sourceID)
boolean onCreateWindow (WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg)
void onExceededDatabaseQuota (String url, String databaseIdentifier, long quota, long estimatedDatabaseSize, long totalQuota, WebStorage.QuotaUpdater quotaUpdater)
void onGeolocationPermissionsHidePrompt ()
void onGeolocationPermissionsShowPrompt (String origin, GeolocationPermissions.Callback callback)
void onHideCustomView ()
boolean onJsAlert (WebView view, String url, String message, JsResult result)
boolean onJsBeforeUnload (WebView view, String url, String message, JsResult result)
boolean onJsConfirm (WebView view, String url, String message, JsResult result)
boolean onJsPrompt (WebView view, String url, String message, String defaultValue, JsPromptResult result)
boolean onJsTimeout ()
void onPermissionRequest (PermissionRequest request)
void onPermissionRequestCanceled (PermissionRequest request)
void onProgressChanged (WebView view, int newProgress)
void onReachedMaxAppCacheSize (long requiredStorage, long quota, WebStorage.QuotaUpdater quotaUpdater)
void onReceivedIcon (WebView view, Bitmap icon)
void onReceivedTitle (WebView view, String title)
void onReceivedTouchIconUrl (WebView view, String url, boolean precomposed)
void onRequestFocus (WebView view)
void onShowCustomView (View view, int requestedOrientation, WebChromeClient.CustomViewCallback callback)
void onShowCustomView (View view, WebChromeClient.CustomViewCallback callback)
boolean onShowFileChooser (WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams)

웹 페이지에서 오류를 기록하려면 다음을 사용해야 합니다.WebChromeClient그리고 그것을 무시합니다.onConsoleMessage:

webView.settings.apply {
    javaScriptEnabled = true
    javaScriptCanOpenWindowsAutomatically = true
    domStorageEnabled = true
}
webView.webViewClient = WebViewClient()
webView.webChromeClient = MyWebChromeClient()

private class MyWebChromeClient : WebChromeClient() {
    override fun onConsoleMessage(consoleMessage: ConsoleMessage): Boolean {
        Timber.d("${consoleMessage.message()}")
        Timber.d("${consoleMessage.lineNumber()} ${consoleMessage.sourceId()}")
        return super.onConsoleMessage(consoleMessage)
    }
}

언급URL : https://stackoverflow.com/questions/2835556/whats-the-difference-between-setwebviewclient-vs-setwebchromeclient

반응형