2017-10-21 9 views
0

이것은 말도 안되게 들리지만 Google에서이 솔루션을 찾을 수는 없습니다. 내 페이지에서React Component에서 창을 닫으려면 어떻게해야합니까?

, 나는 페이지 자체를 닫 버튼을

<Button onClick={() => window.close()} >Close</Button> 

그러나 매번 버튼을 트리거, 내가 내 모바일 앱 react-native을 사용하고 경고

Scripts may close only the windows that were opened by it. 

있어, 그것은 keycloak에 (RN의 WebView을 통해) 열린 페이스 북 인증 페이지에 연결하고, 그 후에 keycloaksuccess 페이지 (localhost/login/success)로 리다이렉트한다. 그 자체. 해당 페이지는 next.js입니다. 심지어 내가 브라우저에 직접 localhost/login/success 액세스, 내가 가까이 페이지 수 없습니다도

업데이트 내가 onNavigationStateChange를 사용하여 해결할와 navState.urlsuccess/login을 포함하거나 상태를 트리거하고 WebView을 종료하지 않을 경우 확인 할 수 있었다. 그러나 나는 아직도 창문을 닫는 방법에 관해 궁금하다 React?

답변

2

onMessage prop를 사용하면 WebView와 React-Native간에 통신 할 수 있습니다.

호출되는 함수 때 webview 통화 window.postMessage. 이 속성을 설정하면 webviewpostMessage 전역이 삽입되지만 여전히 의 기존 값은 postMessage입니다. 난 아직에이 구성 요소를 어떻게 반응하는지에`window.close` 알고 싶어하지만

_onMessage = (message) => { 
    console.log(message); 
} 

render() { 
    return (<WebView ref={(ref) => { this.webView = ref; }} onMessage={this._onMessage} ..otherProps />); 
} 

// In your webview inject this code 

<script> 
    window.postMessage("Sending data from WebView"); 
</script> 
+0

감사합니다,이 솔루션 주위를 해킹하는 또 다른 방법입니다. +1 –

+0

이것은 해킹처럼 보이지만 실제로 'WebView'구성 요소를 제거하는 것은 실제로 'window.close'와 같습니다. 그래서 예를 들어'WebView'를 포함하는'Modal'을 열고'Modal'을 닫으면'window.close'와 같은 효과를 줄 것입니다. – bennygenel