Ionic2 mailto:和短信:?

时间:2016-10-13 17:37:43

标签: android ionic-framework ionic2

您好我在使用ionic2,尝试用mailto:和sms打开短信和邮件应用程序:但在android中有错误net :: ERR_UNKNOWN_URL_SCHEME,但在ios中运行良好

我已经添加了allow-intent,access-origin和allow-navigation。这是在我的config.xml

<access origin="*" />
<access origin="mailto:*" launch-external="true" />
<access origin="tel:*" launch-external="true" />
<access origin="sms:*" launch-external="true" />
<access origin="geo:*" launch-external="true" />
<access origin="maps:*" launch-external="true" />

<allow-intent href="http://*/*" launch-external="true" />
<allow-intent href="https://*/*" launch-external="true" />
<allow-intent href="tel:*" launch-external="true" />
<allow-intent href="sms:*" launch-external="true" />
<allow-intent href="mailto:*" launch-external="true" />
<allow-intent href="geo:*" launch-external="true" />

<allow-navigation href="sms:*" launch-external="true" />
<allow-navigation href="mailto:*" launch-external="true" />

这是我的离子信息

Cordova CLI: 6.3.1
Gulp version:  CLI version 3.9.0
Gulp local:   Local version 3.9.1
Ionic Framework Version: 2.0.0-rc.0
Ionic CLI Version: 2.1.0
Ionic App Lib Version: 2.0.0-beta.20
ios-deploy version: 1.9.0 
ios-sim version: 5.0.8 
OS: Mac OS X El Capitan
Node Version: v6.6.0
Xcode version: Xcode 8.0 Build version 8A218a

我在我的代码中调用它 window.location.href = 'mailto:name@domain.com';

谢谢你的建议

2 个答案:

答案 0 :(得分:1)

在我的应用程序中,我使用

<a [href]="sanitize('sms:' + item.sms)"><button ion-button outline><ion-icon name="ios-chatbubbles"></ion-icon></button></a>
<a href="mailto:{{item.email}}"><button ion-button outline><ion-icon name="ios-mail"></ion-icon></button></a>

注意我必须清理短信以使其在设备上工作,因为它最近两个版本变得不安全。

import { DomSanitizer } from '@angular/platform-browser';

constructor(public public navCtrl: NavController, public sanitizer: DomSanitizer) {}

sanitize(url: string) {
return this.sanitizer.bypassSecurityTrustUrl(url);
}

config.xml中

<access origin="*"/>
<allow-intent href="http://*/*"/>
<allow-intent href="https://*/*"/>
<allow-intent href="tel:*"/>
<allow-intent href="sms:*"/>
<allow-intent href="mailto:*"/>
<allow-intent href="geo:*"/>
<platform name="android">
  <allow-intent href="market:*"/>
</platform>
<platform name="ios">
  <allow-intent href="itms:*"/>
  <allow-intent href="itms-apps:*"/>
</platform>

而不是window.open我使用这样的东西打开网址

<button (click)="launch('https://www.somewhere.com')">Launch URL</button>

launch(url) {
    this.platform.ready().then(() => {
        open(url, "_blank", "location=no");
    });
}

到目前为止,它适用于我的应用程序iOS和Android。

答案 1 :(得分:0)

正如我在你的问题评论中所提到的,只是使用access origin解决了你的问题,但重要的是要知道每个人做了什么。

  
      
  1. 访问:控制允许进行哪些网络请求(图像,XHR等)(通过cordova原生钩子
  2.   
  3. 允许意图:控制应用允许系统打开的URL。默认情况下,不允许外部URL
  4.   
  5. 允许导航:控制可以导航到WebView本身的URL。仅适用于顶级导航。
  6.   

在此处详细了解这些内容:cordova-plugin-whitelist。以及CSP。

很高兴我可以帮忙。