2016-12-21 12 views
9

index.html'u göstermek için React Native web görünümünü kullanıyorum ve HTML uygulamaya karışıklık gönderecek. Uygulama daha sonra mesajı alacak ve konsola yazacaktır. Sorun, uygulamanın anında, postMessage başlığında çalıştırıldığında mesaj alamıyor olmasıdır. Ben HTML bitmiş yükleme ile ilgili belki düşünüyorum. Daha sonra setTimeout ile bir gecikme kullandım ve işe yaradı.yerel html post yanıtı WebView'e ulaşılamıyorMessage

Şimdi bilmek istiyorum:

  • bu sorunu çözmek için daha iyi bir yolu var mı?
  • Neden 100 milisaniye gecikme çalışmadı, ancak 200 milisaniye gecikti?

React Native sürüm 0.39.0 ve Node sürüm 7.2.0 kullanıyorum.

index.html

<head> 
<title>Index</title> 
<script type="text/javascript" src="index.js"></script> 
<script type="text/javascript"> 
    // can not be received 
    postMessage('send to react native from index inline, no delay', '*'); 

    // can not be received 
    setTimeout(function(){ 
     postMessage('send to react native from index inline, delay 0 milliscond', '*') 
    }, 0); 

    // can received 
    setTimeout(function(){ 
     postMessage('send to react native from index inline, delay 100 milliscond', '*') 
    }, 100); 

    onload = function() { 
     // can not be received 
     postMessage('send to react native from index inline after onload, no delay', '*') 

     // can received 
     setTimeout(function() { 
      postMessage('send to react native from index inline after onload, delay 0 milliscond', '*') 
     }, 0); 
    }; 
</script> 

index.js

// can not be received 
postMessage('send to react native from index.js, no delay', '*'); 

// can not be received 
setTimeout(function() { 
    postMessage('send to react native from index.js, delay 100 milliscond', '*') 
}, 100); 

// can received 
setTimeout(function() { 
    postMessage('send to react native from index.js, delay 200 milliscond', '*') 
}, 200); 

Yerli web_view_page.js

tepki: Burada

var bugüne kadar kodudur 10

Krom konsol günlüğü

2016-12-21 11:45:02.367 web_view.js:147 onMessage: send to react native from index inline after onload, delay 0 milliscond 
2016-12-21 11:45:02.491 web_view.js:147 onMessage: send to react native from index inline, delay 100 milliscond 
2016-12-21 11:45:02.628 web_view.js:147 onMessage: send to react native from index.js, delay 200 milliscond 

cevap

1

Şimdiye kadar cevap bulduk ama olay değil veya diğer insanların ihtiyacı varsa o zaman https://github.com/facebook/react-native/issues/11594 kontrol etsin eminim. Temel olarak, iletileri başarıyla gönderebilmemiz için önce postMessage'un pencerede bulunmasını beklemeniz gerekir.

function onBridgeReady(cb) { 
    if (window.postMessage.length !== 1) { 
    setTimeout(function() { 
     onBridgeReady(cb) 
    }, 100); 
    } else { 
    cb(); 
    } 
} 

onBridgeReady(function() { 
    window.postMessage('Bridge is ready and WebView can now successfully receive messages.'); 
}); 

Kaynak: Andrei Barabas

İlgili konular