javascript - Flutter 监听 js 消息
问题描述
我有一个带有简单 webvew 插件的 Flutter 应用程序。在我的 login.js 文件中,我有一个返回用户名和密码的简单函数。
function saveUserPass(credentials){
if (typeof Android !== 'undefined') {
if (Android.saveValues !== 'undefined') {
Android.saveValues(credentials.username, credentials.password);
}
}
var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
if (iOS) {
window.webkit.messageHandlers.saveValeus.postMessage({"name": credentials.username,"pwd": credentials.password});
}
}
}
有没有办法在 Flutter 中收听这些消息?
解决方案
您可以使用类javascriptChannels
的属性。WebView
对于颤振- 您需要创建一个新的JavascriptChannel
并将其传递给您的WebView
构造函数:
JavascriptChannel channel = JavascriptChannel(name: 'Print', onMessageReceived: (JavascriptMessage message) { print(message.message); });
WebView(
javascriptChannels: {channel},
...
)
通道的onMessageReceived
属性可用于以您需要的任何方式处理消息。
对于 JS - 任何时候你想从 JS 发送消息,调用name
(在本例中为“打印”).postMessage(message)
:
Print.postMessage('Hello');
推荐阅读
- angular - 将角度伪影推送到 PCF
- amazon-ec2 - 意外删除的本地密钥对
- c++ - 如何用图像填充整个窗口并允许调整窗口大小?
- html - 当我将它们包装在组标签中时,SVG 元素不可见
- node.js - 完全撤销 Hyperledger Fabric 节点 SDK 中的用户证书
- ant - 选择正确的 IVY 依赖项
- linq - LINQ左连接条件有'OR'
- reactjs - React 如何实现 hooks 使它们依赖于调用顺序
- python - 即使存在 shim,Tox 也找不到 python3.6。我的 pyenv 设置有什么问题?
- python - keras 在 keras.layers.Conv2D 的过滤器参数中使用了哪些类型的“过滤器”?