2016-10-06 7 views
1

私はWebViewでウェブサイトを表示し、ログインするためにユーザー情報を自動入力するコンポーネントを作ろうとしています。私はinjectedJavascipt小道具を持ってWebViewにいくつかのジャバスクリプトを注入することによって自動充填部分に注意を払った。
しかし、私はWebView(サインインページ)を非表示にして、読み込み画面を表示し、ユーザーがウェブサイトにログインしたときにのみ表示したいと思っています。どのような方法でもウェブサイトとやり取りできないので、WebViewflex小物を0に設定し、ログインが完了したらsetNativeProps()を使用して1に設定します。
ウェブサイトのログインが完了したら、WebViewを表示することができますか?そうでない場合は、私のWebViewを隠して、そのウェブサイトのログインが完了したときにそれを表示する他の方法はありますか?
tl; dr:基本的には、私のWebViewは、いくつかの読み込み中の画面が表示されている間にバックグラウンドでいくつかの読み込みを行い、それらのことが完了したら私に信号を送ることを望みます。ウェブサイトのログインが完了するまでWebViewを非表示にするにはどうすればよいですか? [反応するネイティブ]

答えて

2

ハッキーですが、ユーザーが完全にログインしてflexプロパティを変更したときにURLを確認できますか?

navChanged(navState) { 
    if(navState.url.match(loggedInURL){ 
     //set flex to 1 
    }; 
    } 
<WebView 
    source={{uri: this.state.url}} 
    onNavigationStateChange={this.navChanged} 
    startInLoadingState={true} 
    renderLoading={ 
    ()=> { 
     return (<ActivityIndicator />) 
    } 
    } 
/> 
+0

ありがとうございますが、サインインページにまだ – Danopie

+0

が表示されています。申し訳ありませんが、私は間違って質問しました。私は自分の答えを更新しました。ユーザーが正常にログインするとURLが変わるのですか? –

1

私は自分で試していませんが、次のようなものはあなたが望むことをするべきだと思います。 WebViewには、onLoadonLoadStartonLoadEndonErrorなどの関連する小道具がロードされています。これらのコンポーネントでは、コンポーネントの状態を更新できます。 this.setStateと呼び出すと、コンポーネントのrender()が再びトリガされ、現在の状態に基づいて、それを指示するビューがレンダリングされます。

class MyComponent extends Component { 
    constructor(props){ 
     super(props) 
     this.state={ 
      isLoading:false 
     } 
    } 

    render() { 
     if (this.state.isLoading) { 
      return <Spinner visible={true}/> 
     } else 
      return <WebView onLoadStart={() => this.setState({isLoading:true})} onLoadEnd={() => this.setState({isLoading:false})}/> 
     } 
    } 
} 
+0

私は試してみましたが、ログインページがまだ表示されています。 WebViewは、insertedJavascriptを読み込み状態の一部と見なしません。 injectJavascriptが終了したときにisLoadingを変更する方法はありますか? – Danopie

+1

このようにWebViewが実際にロードされていませんか? – NinetyHH

関連する問題