如何允许 webview 中的 mailto 方案颤动
Posted
技术标签:
【中文标题】如何允许 webview 中的 mailto 方案颤动【英文标题】:how to allow mailto schemes in webview flutter 【发布时间】:2021-04-29 00:17:12 【问题描述】:我正在使用 Flutter Webview 插件开发 Flutter webview 应用程序。
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:url_launcher/url_launcher.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget
@override
Widget build(BuildContext context)
return MaterialApp(
home: Scaffold(
body: SafeArea(
child : const WebView(
initialUrl: 'https://google.com',
javascriptMode: JavascriptMode.unrestricted,
),
)
)
);
但是,如果打开的网页中的任何链接是应用链接,例如:fb://profile,我会得到 net::ERR_UNKNOWN_URL_SCHEME。
在android中,我发现解决方案是覆盖here中提到的shouldOverrideUrlLoading,但是在flutter中我应该怎么做?
我正在尝试here 提到的解决方案。
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:url_launcher/url_launcher.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget
@override
Widget build(BuildContext context)
return MaterialApp(
home: Scaffold(
body: SafeArea(
child : const WebView(
initialUrl: 'https://google.com',
javascriptMode: JavascriptMode.unrestricted,
navigationDelegate: (NavigationRequest request)
if (request.url.contains("mailto:"))
launch(request.url);
return NavigationDecision.navigate;
,
),
)
)
);
但它会抛出类似的错误
错误:不是常量表达式。 if (request.url.contains("mailto:"))
【问题讨论】:
【参考方案1】:您可以在下面复制粘贴运行完整代码
第 1 步:您可以从 const WebView
中删除 const
关键字
第 2 步:您可以使用NavigationDecision.prevent
工作演示
完整代码
import 'package:flutter/material.dart'; 导入'包:webview_flutter/webview_flutter.dart'; 导入'package:url_launcher/url_launcher.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget
@override
Widget build(BuildContext context)
return MaterialApp(
home: Scaffold(
body: SafeArea(
child: WebView(
initialUrl:
'https://google.com', //'''https://www.scottseverance.us/mailto.html',
javascriptMode: JavascriptMode.unrestricted,
navigationDelegate: (NavigationRequest request)
print(request.url);
if (request.url.contains("mailto:"))
launch(request.url);
return NavigationDecision.prevent;
else
return NavigationDecision.navigate;
,
),
)));
【讨论】:
该方法运行良好。但修改后,手机打不开应用。此外,锚标签在模拟器上不起作用。 我已经更新了完整代码,你可以添加 else return NavigationDecision.navigate以上是关于如何允许 webview 中的 mailto 方案颤动的主要内容,如果未能解决你的问题,请参考以下文章