App/WebView

WebView Interface(안드로이드)

prden 2022. 10. 31. 21:54

1. 웹뷰(WebView)란?

웹뷰란 쉽게 말해서 앱 안에 HTML iframe을 넣어놓은 것이다. 다시 말해, 웹뷰는 앱 내에 웹 브라우저를 넣는 것이다.

웹뷰는 HTML 기반인 만큼 앱보다 반응성이 약하고, 애니메이션 등의 다양한 UI 효과를 넣기 어렵다. 

https://gradler.tistory.com/m/32

2. 안드로이드 -> 자바스크립트 호출

case1)

React.js Vue.js같은 컴포넌트 기반의 SPA 방식으로 개발 된 웹 프론트에서 컴포넌트 라이프 사이클에 맞춰 이벤트 리스너를 추가, 삭제 하는 방식

 

1. Front side( 자바스크립트 영역 ) 네이티브에서 호출하기 위한 함수를 CustomEvent로 만들고 window.함수명으로 할당

useEffect(() => {
    window.sayHello = new CustomEvent("NativeEvent");
    const nativeEventCallback = (event) => {
      alert(`event receive from Native`);
    };
    
    window.addEventListener("NativeEvent", nativeEventCallback);

    // event listener clean up
    return () => {
      window.removeEventListener("NativeEvent", nativeEventCallback);
    };
 }, []);

2. Native 네이티브에서는 webView가 제공하는 evaluateJavascript 함수로 window.dispatchEvent로 웹에 생성한 함수 호출

webView.evaulateJavascript("window.dispatchEvent(sayHello)")

case2)

전역 scope로 생성된 함수 호출

1.  Front side( 자바스크립트 영역 ) 네이티브에서 호출하기 위한 모듈을 정의하고, 전역 scope에 해당하는 모듈 또는 파일에 import 시킨다.

window.NativeInterface = {
  helloWorld: () => {
    // your javascript code
  },
  ...
}

2. (native side) 네이티브에서는 webView가 제공하는 evaluateJavascript 또는 loadUrl을 이용하여 웹에 생성된 함수를 호출할 수 있다. 

webView.evaluateJavascript("window.NativeInterface.helloWorld()")
// or
webView.loadUrl("javascript:window.NativeInterface.helloWorld()")

 

참고 : https://gradler.tistory.com/m/32

 

하이브리드앱(Android-Javascript) 간 인터페이스 방법

Android WebView에서 Local/Remote 환경에 있는 Javascript와 인터페이스 하는 방식에 대해 간략히 살펴보겠습니다. 유사한 내용을 정리한 글은 찾아보면 많이 있지만 대부분 한 쪽 측면(웹 또는 네이티브

gradler.tistory.com

https://brunch.co.kr/@devapril/40

 

Vue.js 기반 웹뷰와 네이티브간 통신하기

Vue.js 기반 웹뷰와 네이티브와 통신하는 방법 | 이번에 진행하고 있는 프로젝트에서는 Vue.js 를 이용해 웹뷰를 만들고 이를 네이티브와 통신해야하는 일이 생겼다. 생각보다 검색했을 때 깔끔하

brunch.co.kr

https://gradler.tistory.com/33

 

하이브리드앱(iOS-Javascript) 간 인터페이스 방법

iOS WKWebView에서 Local/Remote 환경에 있는 Javascript와 인터페이스 하는 방식에 대해 간략히 살펴보겠습니다. 유사한 내용을 정리한 글은 찾아보면 많이 있지만 대부분 한 쪽 측면(웹 또는 네이티브)

gradler.tistory.com

 

'App > WebView' 카테고리의 다른 글

Safari에서 new Date(), Date.parse 오류  (0) 2022.11.30