
프로젝트를 진행하면서 배너의 navigate를 잘못 구현했던 적이 있는데, 그 때 아래처럼 사용했었다
navigation.navigate(PATH_POPUP_WEBVIEW_PAGE, { uri: item.navigateLink }) *이전에 잘못 쓴 코드
이 코드를 사용해서 navigate를 하게 되면, 웹 뷰로 페이지가 출력되는데
웹 뷰로 이어지는 동작과 웹 뷰 라이브러리에 대해 좀 더 이해하기 위해 기록하고자 한다
우선 프로젝트 내 App.tsx 를 보면 아래처럼 정의되어 있다
<Stack.Screen
name={utilsPath.PATH_POPUP_WEBVIEW_PAGE}
component={PopupWebViewPage}
options={{
presentation: 'modal',
}}
/>
POPUP_WEBVIEW_PAGE 는 App.tsx에 정의된 것처럼 모달 형태로 출력하며,
프로젝트에서 사용하고 있는 PopupWebViewPage 는 react-native-webview 의 Webview로 외부 URL을 표시하고,
웹뷰의 사용자 에이전트를 커스터마이징하여, 특정 웹 사이트에서 요구하는 사용자 식별 정보를 포함시킬 수도 있다.
react-native-webview 의 활용크게는 상단의 네비게이션 바 (공유 + 뒤로가기 버튼) 와 Webview로 구성되어 있다.
onNavigationStateChange 옵션에 사용해 뒤로가기 여부 결정 가능WebViewinjectJavascriptCode (레퍼런스 링크)const INJECTED_JAVASCRIPT = `(function() {
window.ReactNativeWebView.postMessage(JSON.stringify(window.location));
})();`;
<WebView
source={{ uri: 'https://reactnative.dev' }}
injectedJavaScript={INJECTED_JAVASCRIPT}
onMessage={this.onMessage}
/>;onShouldStartLoadWithRequest 웹 뷰 내 요청 처리를 위해 사용osAgent 플랫폼이 iOS면 iOS에 맞는 UserAgent 할당을 위해 사용setSupportMultipleWindows : 웹 뷰가 여러 창을 지원할지 여부
sharedCookiesEnabled : 웹뷰가 앱과 동일한 쿠키를 공유할 지
overScrollMode : ‘never’로 설정 시 스크롤 뷰 끝점에 도달해도 오버스크롤 효과 보여주지 않음
onShouldStartLoadWithRequest : 위에 서술
onNavigationStateChange : 위에 서술 / 네비게이션 상태 변경 시 마다 호출 (setNavState 실행, 뒤로 갈 수 있는지)
onContentProcessDidTerminate : 웹뷰 렌더링이 비정상 종료시 (프로젝트에서는 리로드 실행)
allowsInlineMediaPlayback : 인라인 미디어 재생 허용 여부 (웹 콘텐츠 내에서 재생)
mediaPlaybackRequiresUserAction : 미디어 재생 전 유저 액션이 필요한지 (프로젝트에서는 false라서 자동 미디어 재생)
allowsFullscreenVideo : 비디오 전체 화면 재생 여부 결정
originWhitelist : 허용하는 웹 뷰의 URL
웹뷰가 로드할 수 있는 URL의 출처(origin)를 지정하는 데 사용
웹뷰에서 로드할 URL의 보안과 관련이 있으며, 특정 출처의 URL만 허용하거나 차단할 수 있게 한다
가이드 (링크) 에서는 아래처럼 설명하고 있다
//only allow URIs that begin with https:// or git://
<WebView
source={{ uri: 'https://reactnative.dev' }}
originWhitelist={['https://*', 'git://*']}
/>
웹 뷰 라이브러리를 분석하면서 공식문서를 찾아보고, 프로젝트에서 어떤 식으로 활용되는지 살펴보았다.
앞으로도 잘 몰랐던 라이브러리에 대해 블로그에 정리하면서 좀 더 깊게 이해하는 시간을 가지고자 한다.