@@ -13,6 +13,18 @@ import { useMemeDetailQuery } from '@meme_wiki/apis';
1313import { useEffect , useState } from 'react' ;
1414import { BridgeCommand , COMMAND_TYPE , CommandType } from '@/types/bridge' ;
1515
16+ // 전역에서 함수 정의
17+ if ( typeof window !== 'undefined' ) {
18+ window . onNativeEntered = ( command : BridgeCommand < CommandType > ) => {
19+ // MemeDetailPage 컴포넌트의 setIsWebview를 호출하기 위한 커스텀 이벤트
20+ window . dispatchEvent (
21+ new CustomEvent ( 'webviewStateChange' , {
22+ detail : command . type === COMMAND_TYPE . APP_ENTERED ,
23+ } ) ,
24+ ) ;
25+ } ;
26+ }
27+
1628const MemeDetailPage = ( ) => {
1729 const [ isWebview , setIsWebview ] = useState ( false ) ;
1830 const { memeId } = useParams ( ) ;
@@ -21,18 +33,25 @@ const MemeDetailPage = () => {
2133 const theme = useTheme ( ) ;
2234
2335 useEffect ( ( ) => {
24- window . onNativeEntered = ( command : BridgeCommand < CommandType > ) => {
25- if ( command . type === COMMAND_TYPE . APP_ENTERED ) {
26- setIsWebview ( true ) ;
27- } else {
28- setIsWebview ( false ) ;
29- }
36+ // 웹뷰 상태 변경 이벤트 리스너
37+ const handleWebviewState = ( event : CustomEvent < boolean > ) => {
38+ setIsWebview ( event . detail ) ;
3039 } ;
3140
41+ // 이벤트 리스너 등록
42+ window . addEventListener (
43+ 'webviewStateChange' ,
44+ handleWebviewState as EventListener ,
45+ ) ;
46+
47+ // 웹뷰 진입 알림
3248 nativeBridge . webEntered ( ) ;
3349
3450 return ( ) => {
35- window . onNativeEntered = undefined ;
51+ window . removeEventListener (
52+ 'webviewStateChange' ,
53+ handleWebviewState as EventListener ,
54+ ) ;
3655 } ;
3756 } , [ ] ) ;
3857
0 commit comments