투케이2K

80. (TWOK/LOGIC) [android] 안드로이드 웹뷰 (webview) onCreateWindow (window open) 이벤트 감지 및 외부 링크 전환 로직 본문

투케이2K 로직정리

80. (TWOK/LOGIC) [android] 안드로이드 웹뷰 (webview) onCreateWindow (window open) 이벤트 감지 및 외부 링크 전환 로직

투케이2K 2024. 10. 12. 09:14

[로직 정리]

정리 로직 : Android / 안드로이드

상태 : [android] 안드로이드 웹뷰 (webview) onCreateWindow (window open) 이벤트 감지 및 외부 링크 전환 로직

 

[설 명]

 


// --------------------------------------------------------------------------------------
[사전) 설정 및 정보 확인 사항]
// --------------------------------------------------------------------------------------

- 안드로이드 특정 URL 을 로드 하기 위한 웹뷰 클래스 생성 필요

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[로직 설명]
// --------------------------------------------------------------------------------------

1. 안드로이드 웹뷰 클래스에서 웹뷰 멀티 윈도우 창 표시 설정 수행

  >> main_webview.getSettings().setJavaScriptEnabled(true);
  >> main_webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
  >> main_webview.getSettings().setSupportMultipleWindows(true);


2. window open 이벤트 감지를 위한 웹뷰 setWebChromeClient 크롬 클라이언트 생성 및 onCreateWindow 이벤트 등록 실시

  main_webview.setWebChromeClient(new WebChromeClient() {

    // TODO [웹뷰 [window open] 새창 열기 이벤트 확인]
    @Override
    public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {

        // [자식 WebView 생성 및 실시간 URL 로드 상태 확인]
        WebView mWebViewPop = new WebView(view.getContext());
        mWebViewPop.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                S_Log._fileSave_(null, true, "웹뷰 [window open] 새창 열기 주소 확인", new String[]{ "URL :: " + String.valueOf(url) });


                // [로직 처리 수행 부분]


                return true; 
            }
        });
        WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
        transport.setWebView(mWebViewPop);
        resultMsg.sendToTarget();

        // -------------------------------------------------------------
        return true; // [로직 종료]
        // -------------------------------------------------------------
    }

  });


3. 자식 WebView shouldOverrideUrlLoading 에서 실시간 URL 로딩 주소 확인 및 http , https 가 포함 된 경우 외부 링크로 호출 수행

  // [url 체크 수행 실시]
  if(url.contains("http://") || url.contains("https://")){

      // [외부 링크 이동]
      C_MoveApp.goChromeBrowser(C_CommonWebview.this, url);

  }

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------

[안드로이드 웹뷰 유틸 클래스]

https://blog.naver.com/kkh0977/222680670897?trackingCode=blog_bloghome_searchlist

// --------------------------------------------------------------------------------------

 

반응형
Comments