单击tel:链接时禁止本机对话框

时间:2013-08-30 04:22:52

标签: android html iphone browser popup

单击电话链接时,我一直在考虑禁止移动设备上的对话框。

我们有此要求使用我们网站上的自定义弹出窗口替换iPhone和Android上的现有原生对话框。

我们可以使用HTML5,但对于一个基本网站,我们不使用javascript(适用于低功耗的WAP手机)。

有没有办法通过我网站上的HTML来抑制来自浏览器的手机原生对话框(safari,chrome,firefox?)?

由于

2 个答案:

答案 0 :(得分:1)

如果您的用例允许您避免使用tel:link格式,您可以将这些数字放在看起来像链接的其他内容中,然后让您的网页按照您的意愿处理它们。并且为了避免浏览器自动添加指向其认为是电话号码的数字的链接,请将以下html标记添加到文档的<head>(来自Safari Developer Library):

<meta name="format-detection" content="telephone=no">

这是否足够或者您的问题还有更多我不理解的事情?

<强>更新

进一步说明,似乎结果是在按下tel://链接时调出本机电话拨号器,但只是取消拨号前的用户提示。

根据RFC 3966: The tel URI for Telephone Numbers,第11节安全考虑因素:
“Web客户端和类似工具不得使用”tel“URI来放置    未经用户明确同意的电话    客户。没有适当的用户自动拨打电话    确认可能会招致许多风险......“

因此,虽然可能存在抑制警报的参数,例如&confirmation=false&alert=no,但对于每个移动操作系统,它可能没有文档记录且不同。我的猜测是它不存在。

可能的解决方法

根据iOS Developer Library“当用户点击网页中的电话链接时,iOS会显示一条警告,询问用户是否确实要拨打电话号码并启动拨号,如果用户接受。当用户在本机应用程序中打开带有tel方案的URL时,iOS不会显示警报并在不进一步提示用户的情况下启动拨号。但是,可以将本机应用程序配置为显示其自己的警报。“< / EM>

因此,如果您的用例允许您将网站嵌入UIWebView并将其作为iOS应用分发,则应该可以取消警报。

根据Android Developer Docs
“[使用拨号程序]要求您的应用程序在您的清单中请求以下权限:<uses-permission id="android.permission.CALL_PHONE" />

同样,如果您的使用案例允许您将网站嵌入android.webkit.WebView并将其作为Android应用分发,则也可以禁止显示警告。

答案 1 :(得分:0)

不确定这是否是您要求的完整规格......据我所知,与此争吵太多了几个月,如果操作系统无法直接抑制拨号器对话框认为这是在独立浏览器的页面中点击的电话号码。

我记得它在数据parm中用“Tel:...”广播了一个意图。由于供应商的拨号器注意到这一点,你最希望的是让你自己的拨号器也听这个事件...但是然后android会弹出那个恼人的“完整动作”对话框并且他们必须点击你的,然后必须启动另一个拨号器意图。 (然后你会看到你的拦截拨号器吗?)

正如BigMacAttack指出的那样,您可以通过webkit运行它,将您的标签更改为“tel”以外的其他内容并拦截它。同样,如果服务器页面总是可以通过web-kit视图提供,你可以做我在几个Android和iOS应用程序上做的事情:

// Android flavored
wv1.setWebViewClient(new WebViewClient() {

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {

        boolean dialMe = false;                 

        if (url.indexOf("tel:") > -1) {  // PHONE permissions in AndroidManifest
                                             // see also DIAL_PHONE

            dialMe = myCustomDialerPopup ( Uri.parse(url) ) ; // display YOUR msg.

            if ( dialMe = true ) { // launch normal dialer

                Intent i =  new Intent( Intent.ACTION_DIAL, Uri.parse(url) ) ;
                view.getContext().startActivity(i);  

            } else {
                            //// guess they don't want to call - oops marketing failed !
            } 
        }

        return true;  // or false to stop navigation.
    } 

}