如何在 WebView Flutter 中允许 mailto 和 tel URL 方案?

Posted

技术标签:

【中文标题】如何在 WebView Flutter 中允许 mailto 和 tel URL 方案?【英文标题】:How to allow mailto and tel URL schemes in WebView Flutter? 【发布时间】:2019-10-18 15:30:20 【问题描述】:

我正在 Flutter 中开发 WebApp,但是当我点击 tel:987654321mailto: 链接到未找到页面时, 要在移动设备中打开默认应用程序,我使用的是 url_launcher 依赖项但是在后台单击 WebView 时也会运行相同的链接并转到未找到的页面。

如何处理这个任务?

【问题讨论】:

【参考方案1】:
navigationDelegate: (NavigationRequest request) 
  if(request.url.contains("mailto:")) 
    launch(request.url);
    return NavigationDecision.prevent;
  
  else if (request.url.contains("tel:")) 
    launch(request.url);
    return NavigationDecision.prevent;
  
,

【讨论】:

感谢兄弟:+1:,您也可以添加“sms:”以启动短信活动:+1: @sarthak-solanki 请您回答以下问题。 ***.com/questions/65069369/… 我正在使用相同的代码来允许在 Flutter webview 中使用 mailto 方案。但它抛出错误,我无法构建 apk 文件。【参考方案2】:

添加一些细节,需要url_launcher插件

import 'package:webview_flutter/webview_flutter.dart';
import 'package:url_launcher/url_launcher.dart';

  _launchURL(url) async 
    if (await canLaunch(url)) 
      await launch(url);
     else 
      throw 'Could not launch $url';
    
  

in Widget-build ...

WebView(
        initialUrl: 'http://example.com',
        navigationDelegate: (NavigationRequest request) 
          if (request.url.contains("mailto:")) 
            _launchURL(request.url);
            return NavigationDecision.prevent;
           else if (request.url.contains("tel:")) 
            _launchURL(request.url);
            return NavigationDecision.prevent;
          
          return NavigationDecision.navigate;
        ,
)

【讨论】:

以上是关于如何在 WebView Flutter 中允许 mailto 和 tel URL 方案?的主要内容,如果未能解决你的问题,请参考以下文章

在 WebView [Android Studio] [Java] 中允许麦克风访问(权限)

如何在 Google Cloud Endpoints 中允许 CORS?

如何在 JavaScript 文件中允许空格?

如何在 JetBrains Rider 中允许不安全的代码?

C# - 如何在 OpenFileDialog 中允许多种文件类型?

如何在 ng-repeat 中允许重复?