在科尔多瓦允许通话(以及地图和邮件)

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】:

可能为时已晚,但我想发表评论,以便其他用户无法面对这个问题。 因为我在任何地方都没有找到任何可行的解决方案。

您需要添加 &lt;allow-navigation href="tel:*" /&gt; 在 config.xml 中

我在 mailto 意图方面遇到了同样的问题。当我直接尝试时它正在工作

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

但是当我尝试使用 javascript window.location.href = 'mailto:test@me.com 调用它时出现错误

internal navigation rejected - &lt;allow-navigation&gt; 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 中添加 &lt;allow-navigation href="tel:*" /&gt; 使其可以在 iOS 上运行,但在 Android 上会中断,没有该行也可以正常工作。进退两难。 @DavidPrieto 您应该只能在&lt;platform name="ios"&gt; 下添加它,这样它就不会在 Android 上中断。【参考方案2】:

我在 config.xml 中使用这个配置 ios版

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

安卓版

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

【讨论】:

这部分解决了我的问题,我还要将 target="_system" 添加到链接中【参考方案3】:

config.xml 中更改Cordova's WhiteListPlugin 对我不起作用——&lt;access &gt;,`。我尝试了很多组合,包括上面的那些。并不意味着这些不一定有效,只是对于我的设置它没有。 (为浏览器、Android 和 iOS 构建)

但是,使用 Cordova InAppBrowser Plugin 有效:

使用 inAppBrowser 插件并将目标设置为 _system。 cordova.InAppBrowser.open('tel:123456789', '_system');

这绕过了我在 iOS 中使用unsupported url 看到的问题,并启动了本机系统的网络浏览器(即,不依赖 WhiteListPlugin 来允许 URL 调用)。

希望这会有所帮助。

Cordova 版本 6.3.1。

【讨论】:

以上是关于在科尔多瓦允许通话(以及地图和邮件)的主要内容,如果未能解决你的问题,请参考以下文章

如何包含科尔多瓦插件电子邮件作曲家

如何在sencha touch中实现邮件、通话功能

在 WKWebView 中启动电话/电子邮件/地图链接

iOS7 手机应用中的通话、邮件等图标放入UITableViewCell

Google Play 电子邮件回复。通话/短信记录权限?

在 Skype for Business 中获取通话时间