如何在Flutter WebView中注入简单的代码以隐藏网站的一部分(页脚)?

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

我是Flutter的新手,目前,我正在制作一个非常简单的应用程序,它只是一个WebView。我的问题是如何将这段代码插入Flutter WebView?

footer#footer, div#st_notification_1, #sidebar_box {
    display: none!important;
}

目前,我正尝试在我的应用程序选项卡之一上使用Flutter Team的WebView插件。我要加载并隐藏页脚的网站是:

Syncshop

下面是我试图隐藏页脚的Webview选项卡的代码

已更新:已修复。下面的代码对我有用注意:我也重新检查了网站,并将getElementsById更改为getElementsByClassName,与上面网站上页脚的类名相对应。

注2:Flutter软件包中有很多WebView应用程序,我正在使用Flutter团队的Flutter Webview。

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

class ProfileAccount extends StatefulWidget {
  ProfileAccount({Key key}) : super(key: key);

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

class _ProfileAccountState extends State<ProfileAccount> {
    WebViewController _myController;
    final Completer<WebViewController> _controller =
     Completer<WebViewController>();
  @override
  Widget build(BuildContext context) {
    return SafeArea(
          child: Scaffold(
            body: WebView(
              initialUrl: 'https://syncshop.online/en/login',
              javascriptMode: JavascriptMode.unrestricted,
              onWebViewCreated: (controller) {
                _myController = controller;
              },
          onPageFinished: (initialUrl) {
            _myController.evaluateJavascript("document.getElementsByClassName('footer-container')[0].style.display='none';");
          },
        )
      ),
    );
  }
}
flutter flutter-layout flutter-dependencies
1个回答
2
投票

您可以尝试

flutterWebviewPlugin.evalJavascript('alert("Hello World")')

[请记住,evalJavascript()取代了JS而不是HTML,所以您不能像这样使用

flutterWebviewPlugin.evalJavascript('<script language="JavaScript" type="text/javascript">alert("Hello World")</script>')

这里是完整的示例供您参考,

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

class JSInWebView extends StatefulWidget {
  @override
  JSInWebViewState createState() {
    return new JSInWebViewState();
  }
}

class JSInWebViewState extends State<JSInWebView> {
  final flutterWebviewPlugin = new FlutterWebviewPlugin();
  // alternatively you can define variable as var js = "YOUR_SCRIPT"; and use it inside evalJavascript

  @override
  void initState(){
    super.initState();
    flutterWebviewPlugin.evalJavascript("alert('Hi, I just executed')");
  }

  @override
  void dispose() {
    flutterWebviewPlugin.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return WebviewScaffold(
      url: 'https://google.com',
      hidden: true,
      appBar: AppBar(title: Text("Elite")),
    );
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.