如何使用“webview_flutter”插件在 Flutter WebViewWidget 中调用 JavaScript 方法?

问题描述 投票:0回答:0

在 Flutter 中,我有一个简单的有状态小部件,可以全屏显示网站。 为此,我使用了 webview_flutter 插件。 这是小部件的简化版本,我删除了不相关的变量和函数。例如,小部件全屏显示 Google 网站:

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

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

  @override
  State<WebViewScreen> createState() => _WebViewScreenState();
}

class _WebViewScreenState extends State<WebViewScreen> {
  @override
  void initState() {
    super.initState();
  }

  late WebViewController webViewController = WebViewController()
    ..setJavaScriptMode(JavaScriptMode.unrestricted)
    ..setBackgroundColor(const Color(0x00000000))
    ..setNavigationDelegate(
      NavigationDelegate(
        onProgress: (int progress) {},
        onPageStarted: (String url) {},
        onPageFinished: (String url) {},
        onWebResourceError: (WebResourceError error) {},
        onNavigationRequest: (NavigationRequest request) {
          return NavigationDecision.navigate;
        },
      ),
    )
    ..loadRequest(Uri.parse('https://www.google.com/'));

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        mainAxisSize: MainAxisSize.min,
        children: [
          Expanded(
            child: WebViewWidget(
              controller: webViewController,
            ),
          ),
        ],
      ),
    );
  }
}

我现在想做的是在加载 web 视图 (onPageFinished) 时立即调用 JavaScript 函数(出于测试目的,让我们让它

alert('Hello World');
)。 我怎样才能做到这一点?

我问了 ChatGPT-4 这个确切的问题。它的答案是添加

webViewController.evaluateJavascript("alert('Hello World');");

在 onPageFinished 方法中。所以:

//...
//onPageFinished: (String url) {
   webViewController.evaluateJavascript("alert('Hello World');");
//},
//...

但这导致了一个问题:

The method 'evaluateJavascript' isn't defined for the type 'WebViewController'. Try correcting the name to the name of an existing method, or defining a method named 'evaluateJavascript'.

当我向 ChatGPT-4 询问这个问题时,它只提供了毫无意义的答案。我认为这与 ChatGPT 对最近的发展知之甚少有关。

我也发现了一个类似的问题here但它似乎不对,因为这里使用了“WebView”小部件而不是我正在使用的“WebViewWidget”小部件。

flutter android-webview
© www.soinside.com 2019 - 2024. All rights reserved.