从 Web 视图注销以颤振



I/chromium( 4243): [INFO:CONSOLE(34)] "Uncaught TypeError: JSReceiver.Disconnect is not a function", source: https://myUrl......

我正在使用带有颤振的 web 视图,我想与 webview 中的函数 javascript 进行交互并将其发送到 Flutter。换句话说,我想与网络视图断开连接。

在我的网络视图中,我正在使用

<div class="menuopt" onclick="JSReceiver.Disconnect();">Logout</div>

到目前为止,我在颤振中尝试过:

WebView(
initialUrl:
'https://www.url/insert.html?token=$token&id_user=$id',
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webViewController) {
_controler.complete(webViewController);
},
javascriptChannels: Set.from([
JavascriptChannel(
name: 'JSReceiver',
onMessageReceived: (JavascriptMessage message) {
Disconect(){
sharedPreferences.clear();
Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (BuildContext context) => LoginPage()), (Route<dynamic> route) => false);
print("disconnect");
}}
)
]),
);

尽管我不清楚Disconnect(){...}的语法,但我认为正确的实现应该是这样的:

WebView(
initialUrl:
'https://www.url/insert.html?token=$token&id_user=$id',
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webViewController) {
_controler.complete(webViewController);
},
javascriptChannels: Set.from(
[
JavascriptChannel(
name: 'JSReceiver',
onMessageReceived: (JavascriptMessage message) {
if (message == "disconnect"){
sharedPreferences.clear();
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(builder: (BuildContext context) => LoginPage()), 
(Route<dynamic> route) => false,
);
print("disconnect");
}
}
)
],
),
);

而且,从 JavaScript 方面来看,您可以:

JsReceiver.postMessage('disconnect');

虽然我从未使用过webview_flutter(我用过flutter_webview_plugin(,也没有明确的文档,但我的答案是基于:

  • 这个例子来自他们的回购
  • 此评论对 JavaScript 通道功能请求
  • 该过程应与flutter_webview_plugin中的过程相似的事实

希望这有帮助!

最新更新