Permitir llamada (y maps y correo) en cordova

He estado luchando con esto por un time. Estoy intentando hacer una llamada después de que la gente presiona 'Llamar' desde una window emergente. Lo curioso es que va directo a la llamada cuando hacen clic en el número de teléfono. Pero cuando tocan 'Call', la console regresa:

ERROR Internal navigation rejected - <allow-navigation> not set for url='tel:06-83237516

Código:

Controlador:

 $scope.callPerson = function() { var link = "tel:" + $scope.person.phonenumber; var confirmTel = $ionicPopup.confirm({ title: $scope.person.phonenumber, cancelText: 'Cancel', okText: 'Call' }); confirmTel.then(function(res) { if (res) { window.open(link); } else { console.log('cancel call'); } }); } 

Config.xml:

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

html:

 <div ng-click="callPerson()"> {{person.phonenumber}}</div> 

Con Mail, no funciona en absoluto y devuelve un error idéntico. Lo mismo para abrir maps. Funciona en la aplicación de testing PhoneGap, pero no cuando se implementa.

Código de maps:

 $scope.openmaps = function() { var address = $scope.person.adres + ", " + $scope.person.plaats; var url = ''; if (ionic.Platform === 'iOS' || ionic.Platform === 'iPhone' || navigator.userAgent.match(/(iPhone|iPod|iPad)/)) { url = "http://maps.apple.com/maps?q=" + encodeURIComponent(address); } else if (navigator.userAgent.match(/(Android|BlackBerry|IEMobile)/)) { url = "geo:?q=" + encodeURIComponent(address); } else { url = "http://maps.google.com?q=" + encodeURIComponent(address); } window.open(url); }; 

Puede ser que sea demasiado tarde pero quiero comentar para que otros usuarios no puedan enfrentar este problema. Porque no encontré ninguna solución de trabajo en ninguna parte.

Debe agregar <allow-navigation href="tel:*" /> en config.xml

Estaba enfrentando el mismo problema por la intención de mailto. Estaba funcionando cuando lo probé directamente

 <a onclick="mailto:test@me.com">Email</a> 

Pero recibí un error cuando intenté llamarlo usando javascript window.location.href = 'mailto:test@me.com

internal navigation rejected - <allow-navigation> not set for url='mailto:test@me.com'

Todo lo que necesitas es agregar allow-navigation en tu config.xml

Entonces tu config.xml será:

 <access origin="mailto:*" launch-external="yes"/> <allow-intent href="mailto:*" /> <plugin name="cordova-plugin-whitelist" version="1" /> <allow-navigation href="mailto:*" /> 

Utilizo esta configuration en config.xml para ios

  <allow-navigation href="tel:*" /> 

para Android

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

Alterar el WhiteListPlugin de Cordova en config.xml no funcionó para mí – <access >, `. Probé muchas combinaciones, incluidas las anteriores. No significa que estos no funcionen necesariamente, solo para mi configuration, no funciona. (Creación para browser, Android e iOS)

Sin embargo, el uso del complemento Cordova InAppBrowser funcionó:

Usa el complemento inAppBrowser y establece el destino en _system. cordova.InAppBrowser.open('tel:123456789', '_system');

Esto pasa los problemas que estaba viendo en iOS con unsupported url , e inicia el browser web del sistema nativo (es decir, no confía en WhiteListPlugin para permitir la llamada URL).

Espero que esto ayude.

Cordova versión 6.3.1.