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:, & 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 配置中
<allow-intent href="mailto:*" />
我还必须在页面的 csp 标头中允许 mailto 链接
<meta http-equiv="Content-Security-Policy" content="default-src 'self' mailto:*">
没有看到有关 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 对我不起作用——<access >,
`。我尝试了很多组合,包括上面的那些。并不意味着这些不一定有效,只是对于我的设置它没有。 (为浏览器、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 应用程序中触发
Cordova 5 未在 XCode 中处理新的 ios 应用程序目标