在科尔多瓦允许通话(以及地图和邮件)
Posted
技术标签:
【中文标题】在科尔多瓦允许通话(以及地图和邮件)【英文标题】:Allow call (and maps, and mail) in cordova 【发布时间】:2016-02-05 22:48:45 【问题描述】:我已经为此苦苦挣扎了一段时间。在人们从弹出窗口中按下“呼叫”后,我正在尝试拨打电话。有趣的是,当他们点击电话号码时,它会直接打电话。但是当他们点击“呼叫”时,控制台返回:
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);
;
【问题讨论】:
试试 document.location.href = 'tel:'+$scope.person.phonenumber; 这可能行得通!但是,我发现了一些东西;将 添加到 config.xml 可以解决问题(而不是 )。不知道为什么会这样。也许是因为我尝试从控制器调用 url? 对我来说,它在 android 中运行良好,但在 iOS 中没有任何帮助? 【参考方案1】:可能为时已晚,但我想发表评论,以便其他用户无法面对这个问题。 因为我在任何地方都没有找到任何可行的解决方案。
您需要添加
<allow-navigation href="tel:*" />
在 config.xml 中
我在 mailto 意图方面遇到了同样的问题。当我直接尝试时它正在工作
<a onclick="mailto:test@me.com">Email</a>
但是当我尝试使用 javascript window.location.href = 'mailto:test@me.com
调用它时出现错误
internal navigation rejected - <allow-navigation> not set for url='mailto:test@me.com'
您只需在 config.xml 中添加 allow-navigation
所以你的 config.xml 将是:
<access origin="mailto:*" launch-external="yes"/>
<allow-intent href="mailto:*" />
<plugin name="cordova-plugin-whitelist" version="1" />
<allow-navigation href="mailto:*" />
【讨论】:
在 config.xml 中添加<allow-navigation href="tel:*" />
使其可以在 iOS 上运行,但在 Android 上会中断,没有该行也可以正常工作。进退两难。
@DavidPrieto 您应该只能在<platform name="ios">
下添加它,这样它就不会在 Android 上中断。【参考方案2】:
我在 config.xml 中使用这个配置 ios版
<allow-navigation href="tel:*" />
安卓版
<allow-intent href="tel:*"/>
【讨论】:
这部分解决了我的问题,我还要将 target="_system" 添加到链接中【参考方案3】:在config.xml
中更改Cordova's WhiteListPlugin 对我不起作用——<access >,
`。我尝试了很多组合,包括上面的那些。并不意味着这些不一定有效,只是对于我的设置它没有。 (为浏览器、Android 和 iOS 构建)
但是,使用 Cordova InAppBrowser Plugin 有效:
使用 inAppBrowser 插件并将目标设置为 _system。
cordova.InAppBrowser.open('tel:123456789', '_system');
这绕过了我在 iOS 中使用unsupported url
看到的问题,并启动了本机系统的网络浏览器(即,不依赖 WhiteListPlugin 来允许 URL 调用)。
希望这会有所帮助。
Cordova 版本 6.3.1。
【讨论】:
以上是关于在科尔多瓦允许通话(以及地图和邮件)的主要内容,如果未能解决你的问题,请参考以下文章