2017-10-21 4 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を介して)開いているFacebook認証ページに接続し、その後、keycloaksuccessページにリダイレクトします(localhost/login/successにはページを閉じるボタンがありますそれ自体。ページはnext.jsの下にあります)。でも、私は、ブラウザ上で直接localhost/login/successにアクセスし、私はどちらも

更新ない近いページには、私はonNavigationStateChangeを使用することによって回避し、navState.urlsuccess/loginかいない状態をトリガとWebViewを閉鎖するが含まれているかどうかを確認するために管理することができます。しかし、私はまだ窓を閉じる方法について興味がありますReact

答えて

2

onMessage propを使用すると、WebViewとReact-Native間で通信できます。

webviewwindow.postMessageを呼び出したときに呼び出される関数。このプロパティを設定するとwebviewには postMessageがグローバルに注入されますが、 の既存の値は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

関連する問題