Реагировать на собственный IOS WebView onMessage проблема - PullRequest
3 голосов
/ 12 марта 2019

Введение
Работа над этим обменом сообщениями между ReactNative и WebView и onMessage, по-видимому, не очень стабильна в IOS.

Однако на Android он работает просто отлично.

Я пробовал кучу разных пакетов, но в конечном итоге сделал это с нуля, и у меня даже не получается использовать самый простой вариант использования.

Задача
Что работает, а что нет?

  • Android: отправка и получение работает нормально
  • IOS: отправка в WebView работает, получение от не

Визуальные результаты enter image description here enter image description here

Как видно на скриншотах на IOS, всякий раз, когда я пытаюсь отправить сообщение с содержимым веб-просмотра в RN, выдается странная ошибка, говорящая «Актив не найден» .

Код
App.js

 ...
 handleButtonPressed = () => {
    this.webview.postMessage("Hello from RN")
  }

  onMessage = (event) => {
    alert(event.nativeEvent.data)
  }

  render () {
    return (
      <View style={styles.container}>
        <View
          style={styles.webView}
        >
          <WebView
            ref={r => this.webview = r}
            source={html}
            onMessage={this.onMessage}
          />
        </View>
        <Button
          onPress={this.handleButtonPressed}
          title='Press me'
        />
      </View>
    )
  }
  ...

javascript импортируемого html (не унифицированного)
Этот код скомпилирован с использованием webpack & babel, но это точно не вызывает проблемы.

const button = document.getElementById('send')

document.addEventListener('message', function(data) {
  alert(data.data)
})

button.addEventListener('click', () => {
  window.postMessage("Sending data from WebView", "*")
})

Ошибка с выставки

[21:19:09] Error: invalid asset file path: `${filePath}
[21:19:09]     at Object.parse (/Users/jimvercoelen/Desktop/braintree-payment/node_modules/metro/src/node-haste/lib/AssetPaths.js:66:11)
[21:19:09]     at /Users/jimvercoelen/Desktop/braintree-payment/node_modules/metro/src/Assets.js:312:34
[21:19:09]     at Generator.next (<anonymous>)
[21:19:09]     at step (/Users/jimvercoelen/Desktop/braintree-payment/node_modules/metro/src/Assets.js:326:347)
[21:19:09]     at /Users/jimvercoelen/Desktop/braintree-payment/node_modules/metro/src/Assets.js:326:577
[21:19:09]     at new Promise (<anonymous>)
[21:19:09]     at /Users/jimvercoelen/Desktop/braintree-payment/node_modules/metro/src/Assets.js:326:258
[21:19:09]     at getAsset (/Users/jimvercoelen/Desktop/braintree-payment/node_modules/metro/src/Assets.js:326:58)
[21:19:09]     at /Users/jimvercoelen/Desktop/braintree-payment/node_modules/metro/src/Server.js:576:1722
[21:19:09]     at Generator.next (<anonymous>)

Deps

Я потерял счет того, что я пробовал, а что нет, но сейчас я не знаю, что попробовать, потому что не могу найти никаких подобных проблем.

Любая помощь / вклад приветствуется.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...