mailto:链接未在 Cordova 应用程序中打开 Android 上的邮件应用程序

Posted

技术标签:

【中文标题】mailto:链接未在 Cordova 应用程序中打开 Android 上的邮件应用程序【英文标题】:mailto: links not opening mail app on Android in cordova app 【发布时间】:2015-08-02 01:10:51 【问题描述】:

这快把我逼疯了。我正在开发一个 Ionic 应用程序(Cordova、Angular 等)。我有一个包含邮件地址的联系我们链接:href

href="mailto:info@somedomain.net?subject=my%20App"

我已经阅读了无数关于 SO 的帖子,说你必须删除

<access origin="*"/>

来自项目根目录中的 config.xml 并将其替换为:

<access origin="mailto:*" launch-external="true" />

我已经完成了。当我运行ionic build 时,它会被添加到platforms/android/res/xml 的config.xml 中。但无论我做什么,该链接都不会在任何 Android 模拟器上打开邮件应用程序(即使在模拟器中配置了电子邮件)。

遗憾的是,我没有可以测试的设备 - 所以这只是一个模拟器还是我错过了什么?

【问题讨论】:

你可以尝试添加inAppBrowser插件并将目标设置为_system 如果你使用的是最新版本的cordova,也许你必须在你的html中配置CSP? 我没有替换 而是把它放在 之后,这对我的情况很有效 【参考方案1】:

你必须安装cordova plugin whitelist:

cordova plugin add cordova-plugin-whitelist

或者如果您想保存对 config.xml 文件的引用:

cordova plugin add cordova-plugin-whitelist --save

并且您必须将意图添加到您的 config.xml 文件中:

<allow-intent href="mailto:*" />

您可以找到更多信息here。

【讨论】:

很高兴我能帮上忙。干杯。 @bagusflyer:同样的规则适用。 当我在 android 5.0 上尝试使用 cordova 6.4.0 和 cordova-plugin-whitelist 1.3.1 的这种方法时,我最终会弹出“不支持的操作 - 当前不支持此操作” @Peter:我认为现在情​​况可能发生了变化。我没有使用最新的科尔多瓦版本,所以帮不上什么忙。干杯。 确实如此。除了 window.open('mailto:xxxx') 到 window.location.href='mailto:xxxx") 的简单交换之外,此页面上没有任何东西对我有用【参考方案2】:

试试这个:

window.location.href = "mailto:your@ema.il?subject=Works on ios too";

【讨论】:

天啊。我在这个页面上尝试了所有其他东西,这个,这对我有用。很简单。应该是公认的答案。 其实这个对我也很有效。【参考方案3】:

感谢上面的回复和文章,我刚刚解决了这个问题。我不确定自上述帖子以来有什么变化或没有变化,但供他人参考;我现在有http://, https://, tel:, &amp; mailto: 只安装了inappbrowser 插件,不需要手动编辑config.xml。我做了上面提到的所有事情,它仍然没有工作,所以我开始摆弄,发现我的window.open()调用需要"_system"的第二个参数才能正常工作(它试图使用浏览器并“导航”到@ 987654325@ 没有"_system" 标志)。

但是,出于好奇,我卸载了白名单插件并删除了 config.xml 中的手动编辑,它仍然有效。

注意事项:

-我不记得我尝试过的所有变体,但是 onclick 无法访问 Ionic/Angular/Cordova 范围,所以我坚持使用 ng-click。

-我没有/没有尝试将 href="..." 与任何选项一起使用。 (如果我记得,我会测试它们并更新它以反映我的结果。)

所以,only 安装了cordova-plugin-inappbrowser 并且没有 config.xml 编辑,这是我的工作/测试解决方案:

ng-click="window.open('http://somesite.com', '_system')"
ng-click="window.open('https://google.com', '_system')"
ng-click="window.open('tel:(123) 345-4567')"
ng-click="window.open('mailto:email@example.com', '_system')"

测试于 2016 年 9 月 20 日使用:

已安装 HTC One M8、android 6、cordova v6.3.1、cordova-plugin-inappbrowser v1.5.0、ionic v2.0.0、jdk1.8.0_101、android SDK 21、23 和 24

【讨论】:

【参考方案4】:

如果将“true”替换为“yes”会怎样...我在我的应用程序中使用它并且它可以工作。

<access origin="tel:*" launch-external="yes"/>

【讨论】:

我真的认为这会解决它,遗憾的是它没有。您的链接在模拟器中有效吗?这就是我正在测试的内容...... 它在模拟器中对我有用。你更新到最新版本的cordova和android了吗? (cordova 5.0.0,android 4.0.0。)我必须更新我的项目才能让它工作。 更正,它在我的模拟器中对我不起作用..它返回错误“不支持此操作。”我最初测试了一个电话号码,它有效。我刚刚在我的手机上测试了一封电子邮件(droid turbo,在“收件箱”中打开了电子邮件),它确实有效 感谢 Dave - 将在更新 cordova 之前在设备上进行测试,因为它看起来像使用 ionic 破坏了一些东西。如果它有效,我将标记为正确。 设备不走运。噩梦。【参考方案5】:

今天遇到了这个问题,发现了一些影响 mailto 而不是 tel 链接的东西:

除了按照 dave 的回答将意图添加到 cordova 配置中

&lt;allow-intent href="mailto:*" /&gt;

我还必须在页面的 csp 标头中允许 mailto 链接

&lt;meta http-equiv="Content-Security-Policy" content="default-src 'self' mailto:*"&gt;

没有看到有关 CSP 标头这种行为的任何文档。

【讨论】:

【参考方案6】:

除了使用Cordova's WhiteListPlugin ;

它以这种方式对我有用: 在 config.xml 中

<access origin="*"/>
<access origin="mailto:*" launch-external="true" />
<allow-intent href="mailto:*" launch-external="yes"/>

并且专门为 ios 添加:

<platform name="ios">
    <allow-navigation href="mailto:*" launch-external="yes"/>    
    ...
 <platform name="ios">

【讨论】:

【参考方案7】:

config.xml 中更改Cordova's WhiteListPlugin 对我不起作用——&lt;access &gt;,`。我尝试了很多组合,包括上面的那些。并不意味着这些不一定有效,只是对于我的设置它没有。 (为浏览器、Android 和 iOS 构建)

但是,使用 Cordova InAppBrowser Plugin 有效:

如上所述,使用 inAppBrowser 插件并将目标设置为 _system。

这绕过了我在 iOS 中使用unsupported url 看到的问题,并启动了本机系统 Web 浏览器(即,不依赖 WhiteListPlugin 来允许 URL 调用)。

希望这会有所帮助。

Cordova 版本 6.3.1。

【讨论】:

以上是关于mailto:链接未在 Cordova 应用程序中打开 Android 上的邮件应用程序的主要内容,如果未能解决你的问题,请参考以下文章

window.open链接未在Windows Phone 8的cordova应用中打开

applicationDidBecomeActive 未在 Cordova 应用程序中触发

JQuery 未在 Cordova 中执行

Cordova 5 未在 XCode 中处理新的 ios 应用程序目标

外部图像未在 Android 应用程序中显示 - Meteor - Cordova

Apple 地图未在链接上打开