webview_flutter获取加载完成网页的高度
时间: 2023-09-03 21:07:44 浏览: 181
ios webView获取高度
要获取 `webview_flutter` 加载完成后网页的高度,可以使用 `WebViewController` 和 `JavascriptChannel`。
首先,创建一个 `JavascriptChannel`,用于将网页高度传递给 Flutter 端:
```dart
class HeightChannel {
final Function(double) onReceiveHeight;
HeightChannel(this.onReceiveHeight);
void receiveHeight(String height) {
double parsedHeight = double.tryParse(height);
if (parsedHeight != null) {
onReceiveHeight(parsedHeight);
}
}
}
```
然后,创建一个 `WebViewController`,并在 `WebView` 中使用它:
```dart
WebViewController _controller;
double _webViewHeight = 0.0;
@override
Widget build(BuildContext context) {
return WebView(
initialUrl: 'https://www.example.com',
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (controller) {
_controller = controller;
_controller.addJavascriptChannel(
name: 'heightChannel',
onMessageReceived: (message) {
HeightChannel((height) {
setState(() {
_webViewHeight = height;
});
}).receiveHeight(message);
});
},
onPageFinished: (url) {
_controller.evaluateJavascript('''
heightChannel.postMessage(document.documentElement.scrollHeight.toString());
''');
},
);
}
```
在上述代码中,`onWebViewCreated` 方法中创建了一个名为 `heightChannel` 的 `JavascriptChannel`,并在 `onPageFinished` 方法中使用 `evaluateJavascript` 方法向网页发送消息,获取网页的高度。当网页发送高度信息时,`onMessageReceived` 回调会被触发,将高度传递给 `HeightChannel`,并在 Flutter 端更新 `_webViewHeight` 的值。
最后,你可以使用 `_webViewHeight` 属性来显示网页的高度,例如:
```dart
Text('Webview height: $_webViewHeight')
```
阅读全文