2016-02-05 9 views
4

Я боролся с этим некоторое время. Я пытаюсь позвонить, когда люди нажимают «Вызов» из всплывающего окна. Смешно, что он сразу же звонит, когда набирает номер телефона. Но когда они попали 'Вызов', консоль возвращается:Разрешить вызов (и карты и почту) в кордове

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

Код:

Контроллер:

$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> 

С Mail он вообще не работает и возвращает идентичную ошибку. То же самое для открытия карт. Он работает в тестовом приложении PhoneGap, но не при развертывании.

Карты Код:

$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); 
}; 
+0

Попробуйте document.location.href = 'tel:' + $ scope.person.phonenumber; – Ved

+0

Это может сработать! Однако я нашел что-то; добавив в config.xml сделал трюк (вместо ). Не знаю, почему это так. Может быть, потому, что я пытаюсь вызвать URL-адрес у контроллера? – Cake

+0

для меня он отлично работает в Android, но не работает в iOS любой помощи? –

ответ

4

Может быть, это слишком поздно, но я хочу комментировать, так что другие пользователи не могли справиться с этой проблемой. Потому что я нигде не нашел никакого рабочего решения.

Вам нужно добавить <allow-navigation href="tel:*" /> в config.xml

я столкнулся же проблемой для MailTo намерения. Он работал, когда я попробовал его непосредственно

<a onclick="mailto:[email protected]">Email</a> 

Но я получил сообщение об ошибке, когда я попытался вызвать его, используя код JavaScript window.location.href = 'mailto:[email protected]

internal navigation rejected - <allow-navigation> not set for url='mailto:[email protected]'

Все, что вам нужно, чтобы добавить Allow-навигации в вашем config.xml

Таким образом, ваш config.xml будет:

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

Добавление '' в config.xml заставляет его работать на iOS, но ломать его на Android, который отлично работает без этой строки. Довольно дилемма. –

+2

@DavidPrieto вы должны иметь возможность добавить его только под '', чтобы он не разбивался на Android. – Julien

+0

@Julien это именно то, что я сделал, спасибо. –

3

Я использую этот конфиг в config.xml для ИОС

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

для андроид

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

Это частично разрешило мои проблемы, я должен добавить target = "_ system" к ссылкам также –

1

изменяющего Cordova's WhiteListPlugin в config.xml не работает для меня - <access >, `. Я пробовал много комбинаций, в том числе выше. Не означает, что они не будут работать обязательно, только для моей настройки это не так. (Здание для браузера, Android и IOS)

Однако, используя Cordova InAppBrowser Plugin работал:

Используйте плагин inAppBrowser и установить цель _System. cordova.InAppBrowser.open('tel:123456789', '_system');

Это по проходит вопросы, которые я видел в прошивкой с unsupported url, и запускает веб-браузер родной системы (то есть, не полагается на WhiteListPlugin разрешить вызов URL).

Надеюсь, это поможет.

Кордова версия 6.3.1.