[React-Native] 웹뷰(WebView)와 웹 콘텐츠 간의 통신
2023. 11. 8. 13:39ㆍReact Native
React Native에서 웹뷰(WebView)와 웹 콘텐츠 간의 통신은 주로 두 가지 방법을 통해 이루어집니다.
- JavaScript를 통한 메시지 전송 (postMessage): React Native의 WebView 컴포넌트는 웹 콘텐츠로 메시지를 보내고 웹 콘텐츠에서 메시지를 받을 수 있도록 postMessage 인터페이스를 제공합니다.
- URL 스킴을 통한 메시지 전송: 커스텀 URL 스킴을 사용하여 애플리케이션과 웹 콘텐츠 간에 통신할 수 있습니다. 이 방법은 웹 페이지가 특정 URL 패턴을 로드하려고 할 때 트리거됩니다.
JavaScript를 통한 메시지 전송 (postMessage)
웹 페이지에서 postMessage를 사용하여 React Native로 메시지를 보내는 과정은 다음과 같습니다:
- 웹 콘텐츠 내부에서 메시지 보내기: 웹 콘텐츠 내부의 JavaScript에서 window.ReactNativeWebView.postMessage(data)를 호출하여 메시지를 보냅니다. 여기서 data는 전송하려는 메시지입니다.
- React Native에서 메시지 받기: React Native의 WebView 컴포넌트는 onMessage prop을 통해 메시지를 받습니다. 이 메소드는 웹 콘텐츠에서 보낸 데이터를 매개변수로 가지는 콜백 함수입니다.
<WebView
source={{ uri: 'https://example.com' }}
onMessage={(event) => {
// 웹 콘텐츠에서 보낸 메시지 처리
const message = event.nativeEvent.data;
console.log(message);
}}
/>
반대로, React Native에서 웹 페이지로 메시지를 보내려면 웹뷰의 injectJavaScript 메소드를 사용할 수 있습니다.
this.webview.injectJavaScript(`window.postMessage('${message}', '*');`);
URL 스킴을 통한 메시지 전송
커스텀 URL 스킴은 웹 페이지가 특정 URL 패턴을 로드하려고 할 때 React Native 앱에서 이를 감지하고 적절한 조치를 취하는 데 사용됩니다. 이 방법은 특히 React Native가 postMessage를 지원하지 않는 경우 유용합니다.
- 웹 콘텐츠에서 커스텀 URL 스킴 사용: 웹 콘텐츠에서 JavaScript를 사용하여 커스텀 URL을 호출합니다. 예를 들어, myapp://doSomething라는 URL을 호출하도록 합니다.
- React Native에서 URL 변경 감지: WebView 컴포넌트의 onNavigationStateChange 또는 onShouldStartLoadWithRequest prop을 사용하여 URL 변경을 감지하고 처리합니다.
<WebView
onNavigationStateChange={(event) => {
if (event.url.startsWith('myapp://')) {
// 커스텀 URL 처리
}
}}
/>
이 두 메소드를 통해 React Native 앱과 웹 콘텐츠 간의 양방향 통신이 가능해집니다. 그러나 이 통신을 설정하고 사용하는 과정에서 보안을 고려해야 하며, 특히 URL 스킴을 사용할 때는 잠재적인 보안 취약점에 주의해야 합니다.
또한, 사용 중인 WebView 구현에 따라 정확한 prop 이름이나 메소드 사용법이 달라질 수 있으니 해당 문서를 참조하는 것이 중요합니다. 예를 들어, react-native-webview 라이브러리는 기본 WebView와 다른 API를 가질 수 있습니다.
'React Native' 카테고리의 다른 글
[React-Native] 노치 디자인 대응 (1) | 2023.11.08 |
---|---|
[React-Native] WebView를 사용하여 웹 콘텐츠에 GPS 위치 전달 (0) | 2023.11.08 |
[React-Native] APK 추출 (0) | 2022.07.14 |