Flutter 颤振:限制webview_颤振长按手势或打开链接预览
我正在使用ApacheCordova中的一个应用程序,但我无法从使用Inappbrowser加载的网站获取cookie并保留它们。 因此,我切换到颤振,在那里我可以做上述功能 但是,我希望该应用程序的行为像一个应用程序,而不是像一个浏览器 现在我遇到了这样一个问题,当用户长按链接时,webview\u flatter会打开预览弹出窗口或操作表 当用户长按链接时,请告诉我是否有办法禁用预览弹出窗口或打开操作表 我已经实现了我的Webview,如下所示 '''Flutter 颤振:限制webview_颤振长按手势或打开链接预览,flutter,webview-flutter,Flutter,Webview Flutter,我正在使用ApacheCordova中的一个应用程序,但我无法从使用Inappbrowser加载的网站获取cookie并保留它们。 因此,我切换到颤振,在那里我可以做上述功能 但是,我希望该应用程序的行为像一个应用程序,而不是像一个浏览器 现在我遇到了这样一个问题,当用户长按链接时,webview\u flatter会打开预览弹出窗口或操作表 当用户长按链接时,请告诉我是否有办法禁用预览弹出窗口或打开操作表 我已经实现了我的Webview,如下所示 ''' class\u WebViewExam
class\u WebViewExampleState扩展状态{
最终完成器控制器=
完成符();
final cookieManager=WebviewCookieManager();
共享引用优先权;
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:生成器(生成器:(BuildContext上下文){
返回WebView(
手势识别器:null,
initialUrl:url,
javascriptMode:javascriptMode.unrestricted,
onWebViewCreated:(WebViewController WebViewController)异步{
打印(“创建网络视图”);
_控制器。完成(webViewController);
prefs=等待SharedReferences.getInstance();
字符串cookie=prefs.getString('cookieList');
列出cookies=[];
for(jsonDecode(cookie)中的映射项){
印刷品(项目);
字符串名称=项['name'];
字符串值=项['value'];
字符串域=项['domain'];
DateTime expires=项目['expires'];
bool httpOnly=项目['httpOnly'];
int maxAge=项目['maxAge'];
字符串路径=项['path'];
bool secure=项目['secure'];
添加(Cookie(名称、值)
…域=域
…过期=过期
..httpOnly=httpOnly
..最大年龄=最大年龄
…路径=路径
..安全=安全);
}
等待Cookie经理。设置cookies(cookies);
},
onPageStarted:(字符串url)异步{
打印('页面已开始加载:$url');
},
onPageFinished:(字符串url)异步{
打印('Page finished loading:$url');
最终cookies=等待cookieManager.getCookies(url);
打印(cookies);
列表cookieList=[];
for(cookies中的变量项){
映射cookie={};
cookie['domain']=item.domain;
cookie['name']=item.name;
cookie['value']=item.value;
cookie['expires']=item.expires;
cookie['httpOnly']=item.httpOnly;
cookie['maxAge']=item.maxAge;
cookie['path']=item.path;
cookie['secure']=item.secure;
添加(cookie);
}
prefs.setString('cookieList',json.encode(cookieList));
},
手势导航已启用:false);
}),
);
}
}
'''
我不确定这是否有帮助,但我想禁用longPress上下文菜单,并最终找到了一种方法>
class _WebViewExampleState extends State<WebViewExample> {
final Completer<WebViewController> _controller =
Completer<WebViewController>();
final cookieManager = WebviewCookieManager();
SharedPreferences prefs;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Builder(builder: (BuildContext context) {
return WebView(
gestureRecognizers: null,
initialUrl: url,
javascriptMode: JavascriptMode.unrestricted,
onWebViewCreated: (WebViewController webViewController) async {
print('WebView Created');
_controller.complete(webViewController);
prefs = await SharedPreferences.getInstance();
String cookie = prefs.getString('cookieList');
List<Cookie> cookies = [];
for (Map item in jsonDecode(cookie)) {
print(item);
String name = item['name'];
String value = item['value'];
String domain = item['domain'];
DateTime expires = item['expires'];
bool httpOnly = item['httpOnly'];
int maxAge = item['maxAge'];
String path = item['path'];
bool secure = item['secure'];
cookies.add(Cookie(name, value)
..domain = domain
..expires = expires
..httpOnly = httpOnly
..maxAge = maxAge
..path = path
..secure = secure);
}
await cookieManager.setCookies(cookies);
},
onPageStarted: (String url) async {
print('Page started loading: $url');
},
onPageFinished: (String url) async {
print('Page finished loading: $url');
final cookies = await cookieManager.getCookies(url);
print(cookies);
List cookieList = [];
for (var item in cookies) {
Map<String, dynamic> cookie = {};
cookie['domain'] = item.domain;
cookie['name'] = item.name;
cookie['value'] = item.value;
cookie['expires'] = item.expires;
cookie['httpOnly'] = item.httpOnly;
cookie['maxAge'] = item.maxAge;
cookie['path'] = item.path;
cookie['secure'] = item.secure;
cookieList.add(cookie);
}
prefs.setString('cookieList', json.encode(cookieList));
},
gestureNavigationEnabled: false);
}),
);
}
}