这让我发疯了。我正在使用Ionic应用程序(Cordova,Angular等)。我有一个联系我们链接,其中包含mailto:href
href="mailto:info@somedomain.net?subject=my%20App"
我已经阅读过无数帖子,说你必须删除
<access origin="*"/>
从项目根目录中的config.xml中替换为:
<access origin="mailto:*" launch-external="true" />
我已经完成了。当我运行ionic build
时,它会被添加到platforms/android/res/xml
中的config.xml中。但无论我做什么,链接都不会在任何Android模拟器上打开邮件应用程序(即使在模拟器中配置了电子邮件)。
可悲的是,我没有设备可以测试 - 所以这只是模拟器的事情还是我错过了什么?
答案 0 :(得分:25)
您必须安装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。
答案 1 :(得分:5)
我刚刚解决了这个问题,感谢他们的回应和上面的文章。我不确定自上述帖子以来有什么变化或没有变化,但供其他人参考;我现在http://, https://, tel:, & mailto:
只安装了inappbrowser插件,并且不需要手动编辑config.xml。我做了上面提到的一切&amp;它仍然无法正常工作,所以我开始摆弄并发现我window.open()
调用要求"_system"
的第二个参数正常工作(它尝试使用浏览器和&#34;导航& #34;没有http://mailto:xxx...
标志的"_system"
。
然而,出于好奇的原因,我卸载了白名单插件并删除了config.xml中的手动编辑,它仍然有效。
注意:
- 我不记得我尝试的所有变化,但是onclick无法访问Ionic / Angular / Cordova示波器,所以我坚持使用ng-click。
- 我没有/没有尝试过使用href =&#34; ...&#34;有任何选项。 (如果我记得,我会测试它们并更新它以反映我的结果。)
因此,仅使用 安装cordova-plugin-inappbrowser并编辑 no 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')"
2013年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 SDKs 21,23,&amp; 24安装
答案 2 :(得分:3)
如果用“是”替换“true”怎么办...我在我的应用程序中使用它并且它可以工作。
<access origin="tel:*" launch-external="yes"/>
答案 3 :(得分:3)
今天进入这个并且注意到影响mailto的东西,但没有tel,链接:
除了如dave的回答所描述的那样将意图添加到cordova配置
<allow-intent href="mailto:*" />
我还必须在我的页面的csp标题中允许mailto链接
<meta http-equiv="Content-Security-Policy" content="default-src 'self' mailto:*">
没有看到有关此CSP标头行为的任何文档。
答案 4 :(得分:3)
试试这个:
window.location.href = "mailto:your@ema.il?subject=Works on iOS too";
答案 5 :(得分:0)
在config.xml
中更改Cordova's WhiteListPlugin对我不起作用 - <access >,
`。我尝试了很多组合,包括上面那些组合。并不意味着这些不会起作用,只是为了我的设置它不会。 (适用于浏览器,Android和iOS的构建)
但是,使用Cordova InAppBrowser Plugin工作:
如上所述,使用inAppBrowser插件并将目标设置为_system。
通过unsupported url
传递我在iOS中看到的问题,并启动本机系统Web浏览器(即,不依赖于WhiteListPlugin来允许URL调用)。
希望这有帮助。
Cordova版本6.3.1。
答案 6 :(得分:0)
除了使用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">