【问题标题】:Hide Url references in flutter webview在flutter webview中隐藏Url引用
【发布时间】:2020-06-29 20:37:00
【问题描述】:

我正在开发我的 webview 应用程序,并且正在使用 webview_flutter 包。我的目标是为用户显示特殊的视频内容,但我不希望他们看到网址。在 iOS 上,当您单击并按住列表中的一个视频时,会弹出许多不同的选项(在 safari 中打开链接、共享、复制链接等)。我想知道是否可以隐藏所有 url 和来自用户的 url 相关操作?否则我的 WebView 工作正常。

谢谢

【问题讨论】:

    标签: flutter webview


    【解决方案1】:

    您可以在下面复制粘贴运行完整代码
    你可以使用包https://pub.dev/packages/flutter_inappbrowser
    要解决问题,请临时参考主分支

    flutter_inappwebview:
        git:
          url: https://github.com/pichillilorenzo/flutter_inappwebview.git
          ref: master
    

    工作演示

    完整代码

    import 'package:flutter/material.dart';
    import 'package:flutter_inappwebview/flutter_inappwebview.dart';
    
    class InAppWebViewExampleScreen extends StatefulWidget {
      @override
      _InAppWebViewExampleScreenState createState() =>
          new _InAppWebViewExampleScreenState();
    }
    
    class _InAppWebViewExampleScreenState extends State<InAppWebViewExampleScreen> {
      InAppWebViewController webView;
      String url = "";
      double progress = 0;
    
      @override
      void initState() {
        super.initState();
      }
    
      @override
      void dispose() {
        super.dispose();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(title: Text("InAppWebView")),
            //drawer: myDrawer(context: context),
            body: SafeArea(
                child: Column(children: <Widget>[
              Container(
                padding: EdgeInsets.all(20.0),
                child: Text(
                    "CURRENT URL\n${(url.length > 50) ? url.substring(0, 50) + "..." : url}"),
              ),
              Container(
                  padding: EdgeInsets.all(10.0),
                  child: progress < 1.0
                      ? LinearProgressIndicator(value: progress)
                      : Container()),
              Expanded(
                child: Container(
                  margin: const EdgeInsets.all(10.0),
                  decoration:
                      BoxDecoration(border: Border.all(color: Colors.blueAccent)),
                  child: InAppWebView(
                    initialUrl: "https://flutter.dev/", //"https://flutter.dev/",
                    //initialFile: "assets/index.html",
                    initialHeaders: {},
                    initialOptions: InAppWebViewWidgetOptions(
                            crossPlatform: InAppWebViewOptions(
                              debuggingEnabled: true,
                            )
                        ),
                    onWebViewCreated: (InAppWebViewController controller) {
                      webView = controller;
                    },
                    onLoadStart: (InAppWebViewController controller, String url) {
                      print("onLoadStart $url");
                      setState(() {
                        this.url = url;
                      });
                    },
                    onLoadStop:
                        (InAppWebViewController controller, String url) async {
                      print("onLoadStop $url");
                      setState(() {
                        this.url = url;
                      });
                      /*var origins = await WebStorageManager.instance().android.getOrigins();
                          for (var origin in origins) {
                            print(origin);
                            print(await WebStorageManager.instance().android.getQuotaForOrigin(origin: origin.origin));
                            print(await WebStorageManager.instance().android.getUsageForOrigin(origin: origin.origin));
                          }
                          await WebStorageManager.instance().android.deleteAllData();
                          print("\n\nDELETED\n\n");
                          origins = await WebStorageManager.instance().android.getOrigins();
                          for (var origin in origins) {
                            print(origin);
                            await WebStorageManager.instance().android.deleteOrigin(origin: origin.origin);
                          }*/
                      /*var records = await WebStorageManager.instance().ios.fetchDataRecords(dataTypes: IOSWKWebsiteDataType.ALL);
                          for(var record in records) {
                            print(record);
                          }
                          await WebStorageManager.instance().ios.removeDataModifiedSince(dataTypes: IOSWKWebsiteDataType.ALL, date: DateTime(0));
                          print("\n\nDELETED\n\n");
                          records = await WebStorageManager.instance().ios.fetchDataRecords(dataTypes: IOSWKWebsiteDataType.ALL);
                          for(var record in records) {
                            print(record);
                          }*/
                    },
                    onProgressChanged:
                        (InAppWebViewController controller, int progress) {
                      setState(() {
                        this.progress = progress / 100;
                      });
                    },
                    /*onUpdateVisitedHistory: (InAppWebViewController controller, String url, bool androidIsReload) {
                          print("onUpdateVisitedHistory $url");
                          setState(() {
                            this.url = url;
                          });
                        },*/
                  ),
                ),
              ),
              ButtonBar(
                alignment: MainAxisAlignment.center,
                children: <Widget>[
                  RaisedButton(
                    child: Icon(Icons.arrow_back),
                    onPressed: () {
                      if (webView != null) {
                        webView.goBack();
                      }
                    },
                  ),
                  RaisedButton(
                    child: Icon(Icons.arrow_forward),
                    onPressed: () {
                      if (webView != null) {
                        webView.goForward();
                      }
                    },
                  ),
                  RaisedButton(
                    child: Icon(Icons.refresh),
                    onPressed: () {
                      if (webView != null) {
                        webView.reload();
                      }
                    },
                  ),
                ],
              ),
            ])));
      }
    }
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      // This widget is the root of your application.
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: InAppWebViewExampleScreen(),
        );
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-10-04
      • 2021-03-24
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多