Notice
Recent Posts
Recent Comments
Link
투케이2K
65. (TWOK/UTIL) [Android/Ios] 웹뷰 (webview) 로딩 (로드) 완료 상태 감지 부분 정리 본문
투케이2K 유틸파일
65. (TWOK/UTIL) [Android/Ios] 웹뷰 (webview) 로딩 (로드) 완료 상태 감지 부분 정리
투케이2K 2022. 7. 15. 09:22[설 명]
프로그램 : Android / Ios
설 명 : 웹뷰 (webview) 로딩 (로드) 완료 상태 감지 부분 정리
[Android - 소스 코드]
// [1] : 상태 감지 부분 : 실시간 로딩 상태 체크
main_webview.setWebChromeClient(new WebChromeClient() {
// TODO [실시간 웹뷰 로드 상태 확인]
@Override
public void onProgressChanged(WebView view, int progress) {
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"["+String.valueOf(ACTIVITY_NAME)+" >> onProgressChanged() :: 실시간 웹뷰 호출 상황 확인 실시]");
Log.i("","\n"+"[주 소 :: "+String.valueOf(main_webview.getUrl())+"]");
Log.i("","\n"+"[호출 상황 :: "+String.valueOf(progress)+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
// [웹뷰 로드 완료 상태 : 웹뷰의 호출 상황이 100 인 경우]
if(progress >= 100){
Log.i("---","---");
Log.w("//===========//","================================================");
Log.i("","\n"+"["+String.valueOf(ACTIVITY_NAME)+" >> onProgressChanged() :: 실시간 웹뷰 호출 상황 확인 실시]");
Log.i("","\n"+"[주 소 :: "+String.valueOf(main_webview.getUrl())+"]");
Log.i("","\n"+"[호출 상황 :: "+String.valueOf(progress)+"]");
Log.i("","\n"+"[상 태 :: "+"웹뷰 로드 완료 상태"+"]");
Log.w("//===========//","================================================");
Log.i("---","---");
// ----------------------------------
try {
// [SEARCH FAST] : [인트로 화면 처리]
introBgImageView.setVisibility(View.GONE);
main_webview.setVisibility(View.VISIBLE);
}
catch (Exception e){
e.printStackTrace();
}
// ----------------------------------
try {
if (cookieManager.hasCookies() == true){
Log.i("---","---");
Log.w("//===========//","================================================");
Log.i("","\n"+"["+String.valueOf(ACTIVITY_NAME)+" >> onProgressChanged() :: 실시간 웹뷰 호출 상황 확인 실시]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[주 소 :: "+String.valueOf(main_webview.getUrl())+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[상 태 :: "+"웹뷰 로드 완료 상태"+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[저장된 쿠키 확인 :: "+"쿠키 있음"+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[쿠 키 :: "+String.valueOf(cookieManager.getCookie(main_webview.getUrl()))+"]");
Log.w("//===========//","================================================");
Log.i("---","---");
}
else {
Log.i("---","---");
Log.e("//===========//","================================================");
Log.i("","\n"+"["+String.valueOf(ACTIVITY_NAME)+" >> onProgressChanged() :: 실시간 웹뷰 호출 상황 확인 실시]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[주 소 :: "+String.valueOf(main_webview.getUrl())+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[상 태 :: "+"웹뷰 로드 완료 상태"+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[저장된 쿠키 확인 :: "+"쿠키 없음"+"]");
Log.e("//===========//","================================================");
Log.i("---","---");
}
}
catch (Exception e){
//e.printStackTrace();
}
// ----------------------------------
}
}
});
// [2] : 상태 감지 부분 : 페이지 로드 완료 상태 콜백
class MainWeb extends WebViewClient {
// [로딩이 시작될 때]
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Log.i("---","---");
Log.d("//===========//","================================================");
Log.i("","\n"+"["+String.valueOf(ACTIVITY_NAME)+" >> onPageStarted() :: [웹 클라이언트]]");
Log.i("","\n"+"[설 명 :: "+String.valueOf("로딩 시작")+"]");
Log.d("//===========//","================================================");
Log.i("---","---");
}
// [로딩이 완료됐을 때 한번 호출]
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Log.i("---","---");
Log.w("//===========//","================================================");
Log.i("","\n"+"["+String.valueOf(ACTIVITY_NAME)+" >> onPageFinished() :: [웹 클라이언트]]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[로드 완료 주소 :: "+String.valueOf(url)+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[getUrl 주소 :: "+String.valueOf(main_webview.getUrl())+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[getOriginalUrl 주소 :: "+String.valueOf(main_webview.getOriginalUrl())+"]");
Log.i("","\n"+"--------------------------------");
Log.i("","\n"+"[설 명 :: "+String.valueOf("로드 완료")+"]");
Log.w("//===========//","================================================");
Log.i("---","---");
// [SEARCH FAST] : [인트로 화면 처리]
introBgImageView.setVisibility(View.GONE);
main_webview.setVisibility(View.VISIBLE);
}
}
[Ios - 소스 코드]
// [1] : 상태 감지 : 실시간 웹뷰 로드 상태 체크
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
// [0 ~ 1 사이의 실수형으로 결과값이 출력된다 [0 : 로딩 시작, 1 : 로딩 완료]]
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> observeValue() :: 실시간 웹뷰 로드 상태 확인]")
print("-------------------------------")
print("원 본 :: \(Float((self.main_webview?.estimatedProgress)!))")
print("-------------------------------")
print("퍼센트 :: \(Float((self.main_webview?.estimatedProgress)!)*100)")
print("====================================")
print("")
if Float((self.main_webview?.estimatedProgress)!) >= 1.0 { // 0.5 / 0.9 / 1.0
//DispatchQueue.main.asyncAfter(deadline: .now() + 1.3) { // [특정 시간 이후 수행]
DispatchQueue.main.async { // [즉시 수행]
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> observeValue() :: 인트로 화면 닫기 수행 실시]")
print("-------------------------------")
print("퍼센트 :: \(Float((self.main_webview?.estimatedProgress)!)*100)")
print("====================================")
print("")
// -----------------------------------------
// [SEARCH FAST] : [인트로 화면 처리]
self.main_webview?.isHidden = false // [웹뷰 활성]
self.introBg.isHidden = true // [로딩 이미지 비활성]
// -----------------------------------------
// -----------------------------------------
// [쿠키매니저에 저장된 쿠키 확인]
if self.main_webview != nil {
if #available(iOS 11.0, *) {
self.main_webview!.configuration.websiteDataStore.httpCookieStore.getAllCookies { cookies in
// for cookie in cookies { }
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> observeValue() :: 자바스크립트에 저장된 [개별] 쿠키값 확인 실시]")
print("-------------------------------")
//print("key :: \(cookie.name)")
//print("value :: \(cookie.value)")
print("쿠키 개수 :: ", cookies.count)
print("-------------------------------")
print("쿠키 정보 :: ", cookies)
print("====================================")
print("")
}
}
else {
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> observeValue() :: 자바스크립트에 저장된 [개별] 쿠키값 확인 실시]")
print("-------------------------------")
print("error [에러] :: iOS 11.0 미만 디바이스")
print("====================================")
print("")
}
}
// -----------------------------------------
}
}
}
// [2] : 상태 감지 부분 : 웹뷰 로드 완료 상태 콜백
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
let _endUrl = String(describing: webView.url?.description ?? "")
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> didFinish() :: 웹뷰 로드 수행 완료]")
print("-------------------------------")
print("주 소 :: \(_endUrl)")
print("====================================")
print("")
// -----------------------------------------
// [SEARCH FAST] : [인트로 화면 처리]
self.main_webview?.isHidden = false // [웹뷰 활성]
self.introBg.isHidden = true // [로딩 이미지 비활성]
// -----------------------------------------
// -----------------------------------------
// [퍼미션 상태 업데이트 체크 수행 실시]
self.permissionState()
// -----------------------------------------
}
반응형
'투케이2K 유틸파일' 카테고리의 다른 글
Comments