3

我正在尝试webview在 Flutter 中创建一个用户可以作为 Web 浏览器的 Web 浏览器,该浏览器js在文档加载之前将一些代码注入到文档中(atDocumentStart)。

我尝试了几种方法,但似乎总是为时已晚(onload)注入代码。


final String injectScript =  ("some js code");

class WebPage extends StatefulWidget {
  WebPage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _WebPageState createState() => _WebPageState();
}

class _WebPageState extends State<WebPage> {
  GlobalKey<ScaffoldState> scaffoldState;
  bool isLoading = false;
  final assetIdController = TextEditingController(text: "");
  bool isValid = true;
  static Completer<WebViewController> _webViewController =
      Completer<WebViewController>();


  @override
  void initState() {
    super.initState();

  }

    Widget favoriteButton() {
    return FutureBuilder<WebViewController>(
        future: _webViewController.future,
        builder: (BuildContext context,
            AsyncSnapshot<WebViewController> controller) {
          if (controller.hasData) {

            return FloatingActionButton(
              onPressed: () async {
//                TOO LATE HERE:
                controller.data.evaluateJavascript(injectScript);
              },
              child: const Icon(Icons.refresh),
            );
          }
          return Container();
        });
    }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
        key: scaffoldState,
        appBar: AppBar(
          centerTitle: true,
          elevation: 0.0,
          iconTheme: IconThemeData(color: Theme.of(context).primaryColor),
          backgroundColor: Theme.of(context).canvasColor,
        ),
        backgroundColor: const Color(0xFFF8F8F8),
        body: WebView(
          initialUrl: 'https://communities-qa.cln.network',
          javascriptMode: JavascriptMode.unrestricted,
          onWebViewCreated: (WebViewController webViewController) async {
//            NOT WORKING HERE:
//            await webViewController.evaluateJavascript(injectScript);

            _webViewController.complete(webViewController);
          },
        ),
        floatingActionButton: favoriteButton(),);
  }
}

我希望它在页面之前加载代码(页面依赖于评估的代码来运行)。但它要么为时已晚,要么不起作用。

4

0 回答 0