Flutter Webview двусторонняя связь - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть HTML-файл, который я загружаю в веб-просмотр Flutter, используя flutter_webview_plugin.Я использую evalJavascript для вызова функции в моем коде javascript, что означает flutter (dart) -> js.Тем не менее, мне также нужен какой-то способ передать что-то обратно на слой флаттера (dart), то есть js-> flutter (dart).

Я попытался использовать - webkit.messageHandlers.native - window.native для поддержки обоихплатформы (Android, iOS), проверяющие, доступны ли они в JS.Но это так и не определено.Использование следующего кода для получения экземпляра собственного обработчика в JS.

typeof webkit !== 'undefined' ? webkit.messageHandlers.native : 
window.native;

И даже если я получу этот экземпляр и отправлю сообщение, используя его, не уверен, как обработать его на уровне флаттера (дротика).Мне может понадобиться использовать каналы платформы.Не уверен, если я в правильном направлении.

Есть ли способ, которым я могу сделать это?Я оценил плагин interactive_webview.На Android работает нормально.Но у него быстрая проблема с версиями, и он не хочет продолжать с этим.

Любая помощь будет принята.

1 Ответ

0 голосов
/ 12 марта 2019

Вот пример связи от кода Javascript до флаттера.

Во Flutter создайте свой WebView как:

WebView(
              initialUrl: url,
              javascriptMode: JavascriptMode.unrestricted,
              javascriptChannels: Set.from([
                JavascriptChannel(
                    name: 'Print',
                    onMessageReceived: (JavascriptMessage message) {
                      //This is where you receive message from 
                      //javascript code and handle in Flutter/Dart
                      //like here, the message is just being printed
                      //in Run/LogCat window of android studio
                      print(message.message);
                    })
              ]),
              onWebViewCreated: (WebViewController w) {
                webViewController = w;
              },
            )

и в своем HTML-файле:

<script type='text/javascript'>
    Print.postMessage('Hello World being called from Javascript code');
</script>

Когда вы запустите этот код, вы сможете увидеть журнал " Hello World вызывается из кода Javascript"в окне LogCat / Run студии android.

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