首页 > 解决方案 > 禁用 Flutter WebView 的长按

问题描述

我正在寻找一种方法来禁用颤振 WebView 包的长按手势: https ://pub.dev/packages/webview_flutter

我发现通过将 Web 视图包装在 GestureDetector 中,我可以防止这种情况发生,效果很好。但是,在第一次长按之后,在 web 视图中滚动不再正常工作。

抱歉,如果之前已回答过此问题,但我找不到有关如何执行此操作的任何信息,也找不到自己解决此问题的方法。

提前感谢您的任何帮助/建议

标签: flutterdart

解决方案


好的,经过多次试验和错误,我终于弄明白了

基本上,您需要设置和重用 WebViewController(这是在 中设置的onWebViewCreated),然后在onPageFinished您内部可以使用evaluateJavascript该控制器上的函数注入您的 JavaScript 字符串。

import 'dart:async';

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

class Example extends StatefulWidget {
  @override
  ExampleState createState() => ExampleState();
}

class ExampleState extends State<Example> {
  final Completer<WebViewController> _controller = Completer<WebViewController>();

  WebViewController _webViewController;

  String jsString = 'document.addEventListener("contextmenu", event => event.preventDefault());';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: WebView(
        initialUrl: 'Your URL goes here',
        javascriptMode: JavascriptMode.unrestricted,
        gestureNavigationEnabled: false,
        onWebViewCreated: (WebViewController webViewController) async {
          _webViewController = webViewController;
          _controller.complete(webViewController);
        },
        onPageFinished: (_) {
          _webViewController.evaluateJavascript(jsString);
        },
      ),
    );
  }
}

推荐阅读