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

如何在Flutter中通过webview_flutter设置渲染网页的字体大小?

解决WebView中网页字体大小调整问题

为什么之前的方法无效

  1. Flutter Theme设置不影响WebView内容:你设置的TextTheme仅控制Flutter原生组件的字体样式,WebView渲染的是独立的HTML网页,其样式由自身CSS控制,和Flutter的Theme完全无关,因此这个方法不会生效。
  2. JS注入时机错误+选择器错误:直接在loadRequest后调用runJavaScript时,网页还未加载完成,DOM元素尚未完全生成,注入的样式无法作用到页面;同时你使用的CSS选择器.*是错误的,正确的全局选择器应为*。

正确的解决方案

方法一:监听页面加载完成后注入样式

修改web_view_container.dart,通过setNavigationDelegate监听页面加载完成事件,再注入样式:

import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';

class WebViewContainer extends StatefulWidget {
  const WebViewContainer({super.key});

  @override
  State<WebViewContainer> createState() => _WebViewContainerState();
}

class _WebViewContainerState extends State<WebViewContainer> {
  late final WebViewController controller;

  @override
  void initState() {
    super.initState();
    controller = WebViewController()
      ..setJavaScriptMode(JavaScriptMode.unrestricted)
      ..setNavigationDelegate(NavigationDelegate(
        onPageFinished: (String url) {
          // 页面加载完成后注入全局字体样式
          controller.runJavaScript('''
            var style = document.createElement('style');
            style.innerHTML = '* {font-size: 20px !important;}'; // 替换为你需要的字体大小
            document.head.appendChild(style);
          ''');
        },
      ))
      ..loadRequest(Uri.parse('https://bkthai.org/murli/'));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Today's Murli"),
      ),
      body: WebViewWidget(controller: controller),
    );
  }
}

方法二:精准针对文本元素设置样式

如果全局修改字体导致页面布局混乱,可以只针对文本相关标签调整:

// 在onPageFinished中替换为这段JS代码
controller.runJavaScript('''
  var style = document.createElement('style');
  style.innerHTML = 'body, p, div, span, h1, h2, h3, h4, h5, h6 {font-size: 22px !important; line-height: 1.5;}';
  document.head.appendChild(style);
''');

方法三:利用WebView缩放功能放大页面

如果只需整体放大页面,可直接设置缩放比例:

// 在onPageFinished中添加
controller.runJavaScript('document.body.style.zoom = "1.5"'); // 1.5倍缩放

关键注意点

  • 必须将JavaScriptMode设置为unrestricted,否则无法执行注入的JS代码。
  • 使用!important强制覆盖网页原有的CSS规则,避免被优先级更高的样式覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 03:46:04