flutter - 禁用 Flutter WebView 的长按
问题描述
我正在寻找一种方法来禁用颤振 WebView 包的长按手势: https ://pub.dev/packages/webview_flutter
我发现通过将 Web 视图包装在 GestureDetector 中,我可以防止这种情况发生,效果很好。但是,在第一次长按之后,在 web 视图中滚动不再正常工作。
抱歉,如果之前已回答过此问题,但我找不到有关如何执行此操作的任何信息,也找不到自己解决此问题的方法。
提前感谢您的任何帮助/建议
解决方案
好的,经过多次试验和错误,我终于弄明白了
基本上,您需要设置和重用 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);
},
),
);
}
}
推荐阅读
- xml - 删除 XML 中的子节点并使用 XSLT 将其数据复制到父节点
- kubernetes - 如何解决 Google Kubernetes Engine 中的“-bash: kubeless: command not found”问题?
- reactjs - 如何在 React 应用程序中使用 FullCalendar 4.x 的 dayRender 方法渲染 SVG
- sql-server - 胶水作业将表锁放在 sql server 上作为源
- swift - 如何根据第一个 pickerView 的选择更改我的第二个 pickerView 数组
- android - 屏幕旋转,使视图大小为 0
- php - foreach 和 php 中的替代语法在性能上有什么区别
- google-apps-script - 如何从谷歌表单中提取特定数据到谷歌表格
- timezone - fluentd 可以解析像“美国/芝加哥”这样的 tzinfo 时区吗?
- excel - 有没有办法从一个工作簿创建单个 PDF 并将另一个选项卡添加到其中?