Android11中有个坑
在Android下面的AndroidManifest.xml中需要额外声明一个权限
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
内嵌webview使用flutter_webview_plugin插件实现
方法
使用url_launcher插件,去官网下载之后,导包
import ‘package:url_launcher/url_launcher.dart’;
class HomePage extends StatefulWidget {
HomePage({Key key}) : super(key: key);
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
DateTime _lastPressedAt;
final flutterWebviewPlugin = new FlutterWebviewPlugin();
//监听URL的改变
StreamSubscription<String> _onUrlChanged;
@override
void initState() {
super.initState();
//URL改变的监听
_onUrlChanged = flutterWebviewPlugin.onUrlChanged.listen((url) async {
print("监听到url改变 $url");
if (url.startsWith("mailto") || url.startsWith("tel") || url.startsWith("sms")) {
print("监听到打电话、信息、邮件等 $url");
await flutterWebviewPlugin.stopLoading();
await flutterWebviewPlugin.goBack();
await canLaunch(url) ? await launch(url) : throw 'Could not launch $url';
}
});
}
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async{
if(_lastPressedAt == null || (DateTime.now().difference(_lastPressedAt) > Duration(seconds: 1))){
//两次点击间隔超过1秒,重新计时
_lastPressedAt = DateTime.now();
Fluttertoast.showToast(msg: '请再返回一次以退出程序');
return false;
}
return true;
},
child: WebviewScaffold(
url:"你的网址",
),
);
}
}
测试网页
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="format-detection" content="telephone=yes"/>
<title>电话短信测试</title>
</head>
<body>
<h2>电话短信测试</h2>
<a href="tel:xxxxxxxxxxx">打电话</a>
<a href="sms:xxxxxxxxxxx">发短信</a>
</body>
</html>
Android11中的WebView安全漏洞:处理邮件、电话和短信链接
本文揭示了Android 11中使用flutter_webview_plugin遇到的一个问题,需额外权限QUERY_ALL_PACKAGES,讨论了如何通过url_launcher处理外部链接,重点在于内嵌Webview对邮件、电话和短信链接的处理策略。
907

被折叠的 条评论
为什么被折叠?



