繁体   English   中英

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

[英]Suppressing the native dialog when clicking on a tel: link

我一直在四处寻找有关单击电话链接时隐藏移动设备上的对话框无济于事。

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

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

有没有办法抑制来自我的网站的HTML发出的来自浏览器的电话本机对话框(Safari,chrome,firefox?)?

谢谢

如果您的用例允许您避免使用tel:链接格式,则可以将数字放在看起来像链接的其他地方,然后让您的网页根据需要对其进行处理。 为了避免浏览器自动添加指向它认为是电话号码的数字的链接,请将以下html标记添加到文档的<head> (来自Safari开发者库 ):

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

这足够了吗?或者您还有其他我不明白的问题?

UPDATE

经过进一步的说明,似乎期望的结果是在按下tel://链接时调用本机电话拨号程序,而只是抑制拨号之前的用户提示。

根据RFC 3966:电话号码的tel URI ,第11节安全注意事项:
“ Web客户端和类似工具在未经该客户端用户明确同意的情况下,绝对不能使用“ tel” URI来拨打电话。在没有适当用户确认的情况下自动拨打电话可能会带来许多风险……”

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

可能的解决方法

根据iOS开发人员库
“当用户点击网页中的电话链接时,iOS会显示一条警报,询问用户是否真的要拨打电话号码,如果用户接受,则启动拨号。当用户在本机应用程序中使用电话计划打开URL时, iOS不会显示警报,并在不进一步提示用户的情况下启动拨号。但是,可以将本机应用程序配置为显示自己的警报。”

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

根据Android开发人员文档
“ [使用Dialer]要求您的应用程序在清单中请求以下权限: <uses-permission id="android.permission.CALL_PHONE" />

同样,如果您的用例允许您将网站嵌入android.webkit.WebView并将其作为Android应用程序分发,那么似乎也可以消除警报。

不确定这是否是您要的完整规范...据我判断,这是经过反复的反复研究,如果OS认为这是一个很长时间,就无法直接禁止拨号对话框在独立浏览器中的页面中单击的电话号码。

我记得它在数据参数中用“ 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.
    } 

}                       

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM