- WebView 클래스는 View클래스의 확장
- 웹페이지를 액티비티 레이아웃의 일부로 표시할 수 있게 한다.
- navigation controls, address bar과 같은 완전히 개발된 웹브라우저의 기능은 전혀 포함되어있지 않다.
WebChromeClient()
public void onCloseWindow (WebView window)
- 지정된 WebView를 닫고 필요한 경우 뷰 시스템에서 제거하도록 호스트 애플리케이션에 알립니다.
- 이 시점에서 WebCore는 이 window에서 로드를 중지하고 javascript 의 모든 크로스 스크립팅 기능을 제거했습니다.
- security indicator displayed가 업데이트되어 사용자가 상호작용 중인 페이지가 닫혔음을 알 수 있도록 해야합니다.
public boolean onConsoleMessage (ConsoleMessage consoleMessage)
- 자바스크립트 콘솔 메시지를 앱에 보고한다.
- ChromeClient는 적절하다고 판단되는 로그 메시지를 처리하기 위해 이를 재정의해야 합니다.
public boolean onCreateWindow (WebView view,
boolean isDialog,
boolean isUserGesture,
Message resultMsg)
- 새 window를 생성하도록 앱에 요청한다.
- window
- UI 구성 요소를 그릴 때 화면 상에 그릴 영역을 나타낸다.
- 안드로이드 앱의 화면에 표시되는 모든 내용은 윈도우 내에서 렌더링된다.
- window
- 이 요청을 수락하려면 true를 반환하고 window을 호스팅할 새 WebView를 생성하고 이를 뷰 시스템에 삽입한 다음, 새 WebView를 인수로 사용하여 제공된 resultMsg 메시지를 이 메세지를 기다리는 Handler(Handler가 아니더라도 메시지를 받을 대상)에 보내야합니다.
- 앱이 이 요청을 따르지 않기로 선택하였을 경우 false를 반환해야합니다.
- 이 메서드 기본 구현은 false를 반환한다.
- 앱은 일반적으로 isUserGesture 플래그가 false인 경우 창 생성을 허용하지 않아야한다. 원치 않은 팝업일 수도 있다.
- 앱은 새 창을 표시하는 방법에 주의해야 한다.
- 단순이 기존 WebView위에 창을 오버레이하지 말자.
- 사용자가 현재 보고 있는 사이트에 대해 오해할 수 있다.
- 앱이 기본 페이지의 URL을 표시하는 경우 새 창의 URL도 비슷한 방식으로 표시해야한다.
- 앱에 URL이 표시되지 않으면 새 창 생성을 완전히 허용하지 않는 것이 좋습니다.
- 매개 변수
- view
- 새 window에 대한 요청이 시작된 WebView
- isDialog
- 새창이 전체 크기 창이 아닌 대화 상자여야하는 경우 true
- isUserGesture
- 사용자가 링크를 클릭하는 등 사용자 동작에 의해 요청이 시작된 경우 true
- resultMsg
- 새 WebView가 생성되면 보낼 메시지
- resultMsg.obj는 WebView.WebViewTransport 객체입니다.
- WebView.WebViewTransport.setWebView(WebView)를 호출하여 새 WebView를 전송하는데 사용되어야합니다.
- view
- 반환 값
- 메서드가 false를 반환하지만 resultMsg도 보내면 정의되지 않은 동작이 발생한다.
@Override
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
// 요청을 수락하려면 true를 반환
if (isUserGesture) {
// 사용자 제스처에 의해 시작된 경우에만 새 창 생성을 허용
WebView newWebView = new WebView(getContext());
// 새 창을 현재 레이아웃에 추가
// 이 예시에서는 레이아웃을 LinearLayout으로 가정
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
);
newWebView.setLayoutParams(params);
addView(newWebView);
// WebView.WebViewTransport 객체 가져오기
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
// 새로 생성한 WebView를 설정
transport.setWebView(newWebView);
// 메시지를 통해 결과 반환
resultMsg.sendToTarget();
return true;
} else {
// 사용자 제스처에 의해 시작되지 않은 경우에는 창 생성을 거부
return false;
}
}
public void onHideCustomView ()
- 현재 페이지가 전체 화면 모드를 종료했음을 앱에 알린다.
- 뷰를 전체화면으로 보이게 custom 했을때(예: 전체화면으로 비디오 재생), 전체화면에서 이전화면으로 돌아갈 때 사용해야하는 메소드다.
- 전체화면으로 들어갈 때 변경한 내용을 되돌려야한다.
- 이 메소드를 오버라이딩하면 onShowCustomView()도 오버라이딩 해야한다.
public boolean onJsAlert (WebView view,
String url,
String message,
JsResult result)
- 웹페이지가 JavaScript alert() 대화 상자를 표시하려고 함을 호스트 응용프로그램에 알린다.
- 이 메서드가 false를 반환하거나 재정의 되지 않은 경우 기본동작은 경고 메세지가 포함된 대화 상자를 표시하고 대화 상자가 닫힐 때까지 JavaScript 실행을 일지 중단하는 것입니다.
- 사용자 정의 대화 상자를 표시하려면 앱이 이 메서드에서 true를 반환해야하며 , 이경우 기본 대화 상자가 표시되지 않고 JavaScript 실행이 일시 중지 됩니다.
- JavaScript 실행을 재개할 수 있도록 사용자 정의 대화 상자가 닫힐 때 앱은 JSResult.confirm()을 호출해야합니다.
- 대화 상자를 억제하고 JavaScript 실행을 계속하려면 JsResult.confirm()을 즉시 호출한 다음 true를 반환합니다.
- WebChromeClient가 null로 설정되거나 WebChromeClient가 전혀 설정되지 않은 경우 기본 대화 상자가 표시되지 않고 Javascript 실행이 즉시 계속됩니다.
- 기본 dialog는 상위 window에서 Display.FLAG_SECURE 플래그를 상속하지 않습니다.
- 매개 변수
- view
- 콜백을 시작한 WebView입니다.
- url
- dialog를 요청하는 페이지의 URL입니다.
- message
- 창에 표시할 메세지
- result
- 사용자가 창을 닫았음을 확인하는 JSResult입니다.
- view
- 반환 값
- 요청이 처리되거나 무시되면 true
- WebView가 기본 대화 상자를 표시해야하는 경우 false
public boolean onJsBeforeUnload (WebView view,
String url,
String message,
JsResult result)
- javascript 'beforeunload'이벤트가 WebView에서 트리거될 때 호출됩니다.
- beforunload
- 사용자가 페이지를 떠날 때 발생한다.
- 새로고침
- 뒤로 가기
- 브라우저 닫기 등등
- beforunload
- 이 메서드는 웹페이지가 나가기 전에 사용자에게 경고 또는 확인 메시지를 표시할 수 있는 기회를 제공합니다.
- 사용자가 웹페이지를 떠나기 전에 변경 사항을 저장하거나 확인하기 위한 메시지를 표시하는 데 사용됩니다.
- 웹 페이지에서 데이터를 저장하기 전에 사용자에게 경고를 표시하는 데 유용합니다.
- 매개 변수
- view
- 콜백을 시작한 WebView
- url
- 대화상자를 요청하는 페이지의 url
- message
- 창에 표시할 메시지입니다.
- result
- 사용자 응답을 javascript로 보내는데 사용되는 JSResult입니다.
- view
- 반환
- boolean
- 요청이 처리되거나 무시되면 true
- default dialog를 표시해야하는 경우 false
- boolean
public boolean onJsConfirm (WebView view,
String url,
String message,
JsResult result)
- 웹 페이지가 JavaScript confim() dialog를 표시하려고 함을 호스트 앱에 알린다.
- 이 메서드가 false를 반환하거나 재정의 되지않은 경우 기본 동작은 메시지가 포함된 대화 상자를 표시하고 대화 상자가 닫힐 때 까지 JavaScript 실행을 일시 중단하는 것입니다.
- default dialog는 사용자가 '확인' 버튼을 누르면 JavaScript confim() 코드에 true를 반환하고 사용자가 취소를 누르거나 대화 상자를 닫으면 JavaScript 코드에 false를 반환한다.
- custom dialog를 표시하려면 앱이 이 메서드에서 true를 반환해야하며, 이 경우 기본 대화 상자가 표시되지 않고 JavaScript 실행이 일시 중지된다.
- 사용자 정의 대화 상자가 닫힐 때 앱은 JSResult.confim() 또는 JsResult.cancel()을 호출해야합니다.
- 대화 상자를 억제하고 JavaScript 실행을 계속하려면 JsResult.confirm()또는 JsResult.cancel()을 즉시 호출한 다음 true를 반환 합니다.
- WebChromeClient가 null로 설정되거나 WebChomeClient가 전혀 설정되지 않은 경우 기본 대화 상자가 표시되지 않고 기본값 false가 JavaScript 코드에 즉시 반환됩니다.
- 기본 대화 상자는 상위 window에서 Display.FLAG_SECURE 플래그를 상속하지 않습니다.
- 매개 변수
- view
- 콜백을 시작한 WebView이다.
- url
- 대화 상자를 요청하는 페이지의 URL
- message
- winodw에 표시할 메시지
- result
- 사용자의 응답을 javascript로 보내는데 사용되는 JsResult이다.
- view
- 반환
- boolean
- 요청이 처리되거나 무시되면 true 입니다.
- 기본 대화 상자를 표시해야하는 경우 false
- boolean
public boolean onJsTimeout ()
- Deprecated in API level 17
- 클라이언트에게 JavaScript 실행 시간 초과가 발생했음을 알린다.
- 그리고 클라이언트는 실행을 중단할지 여부를 결정할 수 잇다.
- 클라이언트가 true를 반한하면 JavaScript가 중단된다.
- 클라이언트가 false를 반환하면 JavaScript가 계속된다.
- 계속 실행하는 경우 타임아웃 카운터가 재설정되며, 다음 체크포인트에서 스크립트가 종료되지 않으면 콜백이 계쏙 발생하므로 주의
- 반환
- boolean
- JavaScript 실행을 중단해야하는지 여부
- boolean
public void onPermissionRequest (PermissionRequest request)
- 웹 콘텐츠가 지정된 리소스에 엑세스하기 위한 권한을 요청하고 있으며 현재 권한이 부여되거나 거부되지 않았음을 호스트 애플리케이션에 알린다.
- 호스트 애플리케이션은 PermissionRequest#grant(String[]) 나 PermissionRequest#deny()를 호출해야한다.
- 이 메서드를 재정의 하지 않으면 권한이 거부된다.
- 매개 변수
- request
- 현재 웹 콘텐츠의 PermissionRequest입니다.
- request
public void onProgressChanged (WebView view,
int newProgress)
- 호스트 애플리케이션에 페이지 로드의 현재 진행 상황을 알려줍니다.
- 매개 변수
- newProgress
- 현재 페이지 로딩 진행률
- 0~100
- newProgress
public void onRequestFocus (WebView view)
- 이 WebView에 대한 display 및 포커스를 요청합니다.
- 이 메서드를 호출하면 WebView가 포커스를 받게 되며, 사용자의 입력 및 상호작용에 반응할 수 있게 됩니다.
- 포커스는 사용자가 화면에 특정 요소에 주목하고 키보드 또는 기타 입력장치로 상호작용할 수 있도록 하는 중요한 요소 입니다.
- 주요상황
- 링크를 클릭할 때
- 사용자가 WebView 안에서 하이퍼링크를 클릭하면 클릭한 링크가 새로운 WebView에서 열릴 수 있습니다.
- 이 때 새로 열리는 WebView는 onRequestFocus를 호출하여 화면에 표시되고 포커스를 받게 됩니다.
- 이렇게 하면 사용자가 새로 열린 WebView와 상호작용 할 수 있습니다.
- 자바스크립트로 포커스 요청할 때
- 웹 페이지에서 JavaScript 코드를 사용하여 focus() 함수 또는 유사한 메서드를 호출하면 WebView가 포커스를 요청할 수 있습니다.
- JavaScript 코드에서 이 메서드를 호출하면 해당 WebView가 화면에 표시되고 포커스를 받게 됩니다.
- 링크를 클릭할 때
- 매개 변수
- view
- 포커스 해야 할 WebView
- view
public void onShowCustomView (View view,
int requestedOrientation,
WebChromeClient.CustomViewCallback callback)
- API14레벨에서 추가되었고 18레벨에서 디프리케이티드 됨
- 현재 페이지가 특정 방향으로 사용자 정의 뷰를 표시하려고 함을 호스트 앱에게 알린다.
public void onShowCustomView (View view,
WebChromeClient.CustomViewCallback callback)
- 현재 페이지가 전체 화면 모드로 전환 되었음을 호스트 애플리케이션에 알린다.
- 전체 화면 모드
- 비디오 재생 및 멀티미디어 콘텐츠를 제공할 때 사용되는 웹 페이지의 특별한 표현 모드입니다.
- 이 모드에서는 웹 콘텐츠가 사용자 화면 전체를 가득 채우게 되며, 주소 표시 줄, 브라우저 메뉴는 숨겨지거나 사용자에게 보여지지 않게 됩니다.
- 전체 화면 모드
- 이 호출 후에는 웹 콘텐츠가 더이상 WebView에서 렌더링 되지 않고 대신 view에 렌더링 된다.
- 호스트 애플리케이션은 이 웹 콘텐츠를 실제 전체 화면으로 표시하려면 WindowManager.LayoutParams.FLAG_FULLSCREEN 플래스로 구성된 창에 이 뷰를 추가해야 합니다.
- 애플리케이션은 콜백을 호출하여 명시적으로 전체화면 모드를 종료할 수 있다( 사용자가 뒤로 버튼을 누를 때)
- 그러나 웹페이지는 종종 전체화면을 종료하기 위해 자체 UI를 표시하므로 이는 일반적으로 필요하지 않다.
- WebView가 전체 화면 모드를 종료하는 방법에 관계없이 WebView는 onHideCustomView를 호출하여 애플리케이션에 사용자 정의 뷰를 제거하라는 신호를 보냅니다.
- 이 메서드가 재정의 되지 않으면 WebView는 웹페이지에 전체화면 모드를 지원하지 않는 다고 보고하고 전체 화면 모드에서 실행하라는 웹페이지의 요청을 따르지 않습니다.
public boolean onShowFileChooser (WebView webView,
ValueCallback<Uri[]> filePathCallback,
WebChromeClient.FileChooserParams fileChooserParams)
- 이 메서드는 일반적으로 '<input type="file"> 유형의 HTML 파일 입력 요소를 WebView 내에서 클릭할 때 호출된다.
- 이는 사용자가 파일 선택 버튼을 누른 것에 대한 응답으로 파일 입력 유형의 HTML양식을 처리하기 위해 호출된다.
- 요청을 취소하려면 filePathCallback.onReceiveValue(null)를 호출하고 true를 반환합니다.
- 매개 변수
- webView
- 요청을 시작하는 WebView 인스턴스 입니다.
- filePathCallback
- 업로드할 파일에 대한 경로 목록을 제공하려면 이 콜백을 호출하고 취소하려면 null을 호출합니다.
- onShowFileChooser(WebView, ValueCallback, FileChooserParams) 구현이 true를 반환하는 경우에만 호출해야합니다.
- fileChooserParams
- 열려는 파일 선택기의 모드와 함께 사용할 옵션을 설명한다.
- webView
- 반환
- boolean
- filePathCallback이 호출되면 true이고, 기본 처리를 사용하려면 false 이다.
- boolean
'android' 카테고리의 다른 글
8. Android WebView 공식문서 공부 (0) | 2023.11.04 |
---|---|
6. WebSettings 안드로이드 공식문서 공부 (0) | 2023.09.23 |
5. 안드로이드 Application 공식문서 공부 (0) | 2023.09.19 |
4. (android) WebViewClient 공식문서 공부 (0) | 2023.09.17 |
Activity 공식 문서 공부 (0) | 2023.08.30 |