webview - 如何在 Flutter 中使用 WebViewController 插件显示网页的一部分?

标签 webview flutter

我有一个 div id 作为 campaign-nav 和 class id 作为 campaign-term-list 和

我不想显示页眉、菜单和页脚。在 Android 中,我可以使用以下代码:(找到 WebViewController android 代码:Display a part of the webpage on the webview android)

如何在Flutter中使用WebViewController插件显示网页的一部分?

view.getSettings().setJavaScriptEnabled(true);
        view.setWebViewClient(new WebViewClient() {

            @Override
            public void onPageFinished(WebView view, String URL)
            {
                view.loadUrl("javascript:(function() { " +
                        "var head = document.getElementsByClassName('header')[0].style.display='none'; " +
                        "var head = document.getElementsByClassName('blog-sidebar')[0].style.display='none'; " +
                        "var head = document.getElementsByClassName('footer-container')[0].style.display='none'; " +
                        "})()");

            }
        });
        view.loadUrl("your url");

更新: Flutter 示例有;

 final Completer<WebViewController> _controller = Completer<WebViewController>();

他们将 _controller 用作;

new WebView(
              initialUrl:
                  'h****s://mysite.com/campaing/',
              javascriptMode: JavascriptMode.unrestricted,
              onWebViewCreated: (WebViewController webViewController) {
                _controller.complete(webViewController);
              },
              javascriptChannels: <JavascriptChannel>[
                _toasterJavascriptChannel(context),
              ].toSet(),

              onPageFinished: (String url) {
                print('Page finished loading: $url');

                //Here is I put a boolean variable so I can show a progress indicator
                setState(() {
                  _loadedPage = true;

                });
              },
            ),

更新 2: 在我的网页中,我有如下所示的页脚。

<div id="footer">
    <div class="container">
        <div class="row">
            <div class="col-md-4">
                <div class="footer-menu">

我把你的代码放在下面 _controller.complete(webViewController);部分。但仍然显示页脚。

onWebViewCreated: (WebViewController webViewController) {
                _controller.complete(webViewController);
                webViewController.evaluateJavascript("document.getElementsByClassName('footer-menu')[0].style.display='none';");
              },

当我尝试将 webViewController.evaluateJavascript 放入 onPageFinished 部分时,它找不到“.evaluateJavascript”部分。

更新 3: 完整代码:(不工作)

new WebView(
              initialUrl: 'https://stackoverflow.com',
              javascriptMode: JavascriptMode.unrestricted,
              onWebViewCreated: (controller){
                _myController = controller;
              },
              javascriptChannels: <JavascriptChannel>[
                _toasterJavascriptChannel(context),
              ].toSet(),
              onPageFinished: (url){
                print('Page finished loading: $url');
                _myController.evaluateJavascript("document.getElementsByClassName('header')[0].style.display='none';");
                setState(() {
                  _loadedPage = true;
                });
              },
            ),

最佳答案

到目前为止,我自己还没有完成,但正如 webview_flutter 的官方 API 中所述包,您应该能够通过调用 WebViewController 提供的 evaluateJavascript 方法来实现此目的,如 here 所示.

WebView(
  initialUrl: 'https://stackoverflow.com',
  javascriptMode: JavascriptMode.unrestricted,
  onWebViewCreated: (controller) {
    // here you can access the WebViewController
    controller.evaluateJavascript("document.getElementsByClassName('header')[0].style.display='none';");
  },
  ...

我使用了您代码段中的示例 JavaScript 代码作为引用。如 API 中所述,您可能需要等到 WebView 运行网站上的所有 JavaScript 代码,然后再运行您自己的代码,以确保所有内容都已加载并且元素您尝试找到存在。为此,WebView 提供了一个 onPageFinished 回调:

...
WebViewController _controller;
...

WebView(
  initialUrl: 'https://stackoverflow.com',
  javascriptMode: JavascriptMode.unrestricted,
  onWebViewCreated: (controller) {
    _controller = controller;
  },
  onPageFinished: (url) {
    _controller.evaluateJavascript("document.getElementsByClassName('header')[0].style.display='none';");
  },
  ...

关于webview - 如何在 Flutter 中使用 WebViewController 插件显示网页的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56180481/

相关文章:

firebase - 如何按条件选择特定文档并更新它 flutter firestore?

android - 在MacOS上的iOS Simulator上运行Flutter应用失败

android - 将 WebView 中的文本方向设置为 RTL

android - Webview 闪烁 Android 10 : "tile memory limits exceeded, some content may not draw" Multiple WebViews inside my app

flutter - Flutter中webview加载成功前如何显示本 map 片?

ios - 如何在 IOS Swift 中的 WKWebView 顶部添加边距

swift - 水平滚动以在 Swift 中显示 PDF

flutter - 如何在 flutter 中准备字符串变量格式?

flutter - 使用用户的实时位置 flutter 更新折线路线

mobile - Flutter - 单击时渲染新的小部件