I use webview_flutter in Flutter, and I use it to show html. I can transfer a String to Flutter use the following js code: JS:
function test()
{
alert("xxxxx");
window.jsBridge.postMessage("test name");
}
Flutter:
return Scaffold(
appBar: AppBar(
title: Text('Webview Example'),
),
body: WebView(
// 加载html文件夹下的test.html
initialUrl: 'file:///android_asset/flutter_assets/html/test.html',
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (controller) async{
_webViewController = controller;
// var s = await _webViewController.evaluateJavascript(
// 'window.addEventListener("message", (event,event1) => {Toaster.postMessage(JSON.stringify(event.data,event1.data));}, false);');
// print(s);
},
onPageFinished: (url) async{
try {
var s = await _webViewController.runJavascript(
'window.addEventListener("message", (event) => {jsBridge.postMessage(JSON.stringify(event.data));}, false);');
} on Exception catch (e) {
// TODO
}
// print(s);
},
javascriptChannels: {
JavascriptChannel(
name: 'jsBridge',
onMessageReceived: (message) {
print('jsBridge : ${message.message}');
})
},
),
);
But! This code can only transfer ONE String, some html pages need to transfer two Strings, like this:
window.jsBridge.postMessage("test name","test data");
I can not get any message from Flutter if transfer two Strings.
Now I am puzzling about this, can you help me?
By the way, I can not edit html code, because all the websites transfer two strings. I can only edit Flutter part.
I tried to use Android java to do that, but I want to get the goal using pure dart.