在扑朔迷离中,我怎么能注入`js`脚本`atDocumentStart`而不是`onload`?

问题描述 投票:2回答:1

我正在尝试在Flutter中创建一个webview,用户可以作为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(),);
  }
}

我希望它在页面之前加载代码(页面依赖于运行的评估代码)。但是为时已晚或无法正常工作。

webview dart flutter wkwebview flutterwebviewplugin
1个回答
0
投票

您的问题解决了吗?因为我现在正面临着同样的问题,而且我没有得到解决]

© www.soinside.com 2019 - 2024. All rights reserved.