You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter WebView页面空白报错:Uncaught TypeError: Object.fromEntries is not a function

问题描述

在Flutter应用中使用WebView组件加载指定页面时,页面显示空白,调试控制台输出以下错误:

I/chromium( 5309): [INFO:CONSOLE(2)] "Uncaught TypeError: Object.fromEntries is not a function", source: https://resumatic.viosa.in/static/js/main.0dc13ca6.js (2)

相关代码如下:

class ResumaticDashboard extends StatefulWidget {
  const ResumaticDashboard({Key? key}) : super(key: key);

  @override
  State<ResumaticDashboard> createState() => _ResumaticDashboardState();
}

class _ResumaticDashboardState extends State<ResumaticDashboard> {
  late final WebViewController _controller;
  bool _loading = true;

  @override
  void initState() {
    _controller = WebViewController()
      ..setJavaScriptMode(JavaScriptMode.unrestricted)
      ..loadRequest(Uri.parse(
          'https://resumatic.viosa.in/auth?token=${token}')) // 此处传入token
      ..setNavigationDelegate(NavigationDelegate(
        onPageFinished: (_) {
          setState(() {
            _loading = false;
          });
        },
      ));
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Resumatic Dashboard'),
      ),
      body: Stack(
        children: [
          WebViewWidget(controller: _controller),
          if (_loading)
            Center(
              child: CircularProgressIndicator(),
            ),
        ],
      ),
    );
  }
}
解决方案

这个错误的核心原因是WebView使用的Chromium内核版本不支持ES2019新增的Object.fromEntries方法,以下是几种可行的解决方式:

1. 注入Polyfill兼容补丁

在WebView加载目标页面之前,先注入一段JavaScript代码,手动实现Object.fromEntries方法,让旧版本内核支持该功能。修改initState中的WebViewController初始化逻辑:

@override
void initState() {
  _controller = WebViewController()
    ..setJavaScriptMode(JavaScriptMode.unrestricted)
    // 先注入polyfill
    ..runJavaScript('''
      if (!Object.fromEntries) {
        Object.fromEntries = function(entries) {
          return entries.reduce(function(obj, [key, value]) {
            obj[key] = value;
            return obj;
          }, {});
        };
      }
    ''')
    ..loadRequest(Uri.parse('https://resumatic.viosa.in/auth?token=${token}'))
    ..setNavigationDelegate(NavigationDelegate(
      onPageFinished: (_) {
        setState(() {
          _loading = false;
        });
      },
    ));
  super.initState();
}

2. 升级WebView依赖版本

确保你使用的webview_flutter包是最新版本,新版本通常会集成更新的Chromium内核,对新的JavaScript特性支持更好。在pubspec.yaml中更新依赖:

dependencies:
  webview_flutter: ^4.4.0 # 替换为最新版本号

然后执行flutter pub get更新依赖。

3. 适配前端页面(若有权限修改)

如果你能控制目标网页的代码,可以在前端项目中配置Babel转译,将ES2019+的代码转换为兼容旧浏览器的版本,或者直接引入core-js等polyfill库,确保Object.fromEntries在低版本环境中可用。

内容的提问来源于stack exchange,提问作者lethalcoder9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:02:21