перейти на реагировать родную страницу из веб-просмотра - PullRequest
0 голосов
/ 08 октября 2018

У меня есть собственное приложение, которое использует webView для визуализации HTML-кода, я использовал postmessage для связи между ними.webview отправит сообщение, чтобы реагировать на собственный язык, чтобы открыть другую реагирующую собственную страницу (например, отправить сообщение «открыть страницу входа в систему»), поэтому я получу его в onMessage (событие), а затем, когда я хочу использовать this.props.navigateTo, он говорит: «не может прочитать»свойство navigateTo из неопределенного '.я использовал console.log(this) и понял, что 'this' это DedicatedWorkerGlobalScope , что я не могу использовать navigatTo().Как я могу использовать navigatTo в этом случае (пока я в DedicatedWorkerGlobalScope) или как я могу закрыть или остановить рендеринг веб-просмотра, чтобы сделать это?

  onMessage( event ) {
    let post = JSON.parse(event.nativeEvent.data);
    console.log(event)
   switch(post.message){

       case 'open login page':
           console.log(this); // 'DedicatedWorkerGlobalScope'
          this.props.navigateTo('login'); //'can not read property navigation of undefined'
           break;
   }
}

это веб-просмотр:

  <WebView
            // onNavigationStateChange={async (e) => {
            //     console.log(e);
            //      if (async() => await getKey('isLogged') === false)
            //          this.props.navigateTo('login') //its ok here
            // }}
            source={{uri: isAndroid ?'file:///android_asset/html/index.html'
                :'./html/index.html'}}
            ref={ webView => this.webView = webView }
            onMessage={this.onMessage}
        />

я использую this.props.navigatTo() для навигации и все в порядке, но в этом случае состояние не меняется, чтобы выполнить это здесь, и это мой стекавигатор:

  login: {
        screen: Login
    },
    app: {
        screen: App  // webview defined here
    },

1 Ответ

0 голосов
/ 11 октября 2018

Я решаю проблему сам :)) Я должен использовать bind, OnMessage = {this.onMessage.bind (this)} Я просто забыл это ...

...