Вот соответствующий код:
Код: Выделить всё
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
class _WebViewStackState extends State {
var loaded = false;
late WebViewController _webViewController;
@override
void initState() {
super.initState();
_webViewController = WebViewController()
..loadRequest(Uri.parse(widget.url))
..setNavigationDelegate(
NavigationDelegate(
onPageStarted: (url) {},
onProgress: (progress) {},
onPageFinished: (url) {
setState(() {
loaded = true;
});
},
onNavigationRequest: (navigation) {
final host = Uri.parse(navigation.url).host;
print(host);
return NavigationDecision.navigate;
},
),
)
..setJavaScriptMode(JavaScriptMode.unrestricted)
..addJavaScriptChannel(
'callNativeMethod',
onMessageReceived: (message) {
print(message.message);
},
)
..addJavaScriptChannel('callAnalysisEvents',
onMessageReceived: (message) {
print(message.message);
});
}
@override
Widget build(BuildContext context) {
print(widget.url);
return
SafeArea(
child: WebViewWidget(
controller: _webViewController,
));
}
}
iOS:
Код: Выделить всё
messageHandlers.callNativeMethod.postMessage
Код: Выделить всё
window.external. CallNativeMethod(JSON.stringify({type,data}))
Это уже установлено в AndroidManifest.xml:
Код: Выделить всё
Изменить невозможно. со стороны js, потому что это от нашего клиента; надеюсь, что он работает нормально как на iOS, так и на Android. я что-то пропустил?
Есть идеи?
Подробнее здесь: https://stackoverflow.com/questions/787 ... er-webview
Мобильная версия