Firefox中的可点击电话协议标签

Posted

技术标签:

【中文标题】Firefox中的可点击电话协议标签【英文标题】:Clickable tel protocol a tag in firefox 【发布时间】:2012-12-29 17:46:16 【问题描述】:

我有一个非常标准的电话号码标签。它适用于所有除了 Firefox。我认为 tel 协议是标准的 - 是否有我不知道的解决方法?

<a class="tel" href="tel:8001234567">(800) 123-4567</a>

Firefox 错误信息:

地址不明白

Firefox 不知道如何打开这个地址,因为协议 (tel) 没有与任何程序相关联。

您可能需要安装其他软件才能打开此地址。

【问题讨论】:

我会看看这个问题和答案***.com/questions/1164004/… 已经做到了。答案很旧 - 从 (tel) 与 (callto) 相比,(tel) 没有得到广泛使用的支持。 Firefox 特有的问题让我感到困惑。似乎(电话)对我来说很标准。 我不会说这有什么令人困惑的地方。 Firefox 根本没有实现对tel 的支持。 您似乎没有仔细阅读它,这个问题最后一次更新是在 2012 年 4 月。为什么您希望 Firefox 能够理解 tel: 协议而不需要进一步的附加组件? 你看到莫迪的回答了吗?它会照顾你的情况,它不是那么老.. 【参考方案1】:

Firefox 不知道每个协议的程序。在这种情况下,用户需要在设置中指定一个程序。除了用 Skype 引入的非官方 callto: 替换它之外,没有服务器端的解决方法。

【讨论】:

callto: 也给出与 tel 相同的错误:-不确定这是否特定于我的 firefox 版本(Ubuntu 12.10 上的 18.0) telcallto 在 Firefox(或任何桌面浏览器)中根本不起作用。您必须安装第三方扩展程序/程序才能支持此功能。为什么桌面浏览器会自动支持这个?除非安装了处理电话号码/呼叫的软件,否则浏览器无法对其进行任何操作。移动浏览器是另一回事。此外,当我单击 tel 链接时,Chrome 不会执行任何操作(相对于 Firefox,它会显示您在问题中陈述的页面)。 @mathewpavkov:在我的 Firefox 版本中,消息不同:电话:“我们不知道这意味着什么(无效的 url)”调用:“我们不知道如何处理这个(未知协议)”。这就是我写 callto 的原因:)【参考方案2】:

我知道这是一个老问题,但如果您需要解决方法,这可能会有所帮助:

var isFirefox = (navigator.userAgent.toLowerCase().indexOf('firefox') > -1);
var isMobile = (typeof window.orientation !== "undefined") ||
               (navigator.userAgent.indexOf('IEMobile') !== -1);

if(isFirefox && !isMobile) 
    $('a[href^="tel:"]').click(function()  return false; );


注意:

正如@Peter 指出的那样,这段代码肯定会禁用 Firefox 上的 tel: 链接。我添加了一个针对移动设备的检测 (found here) 以限制副作用,但它仍然会禁用可以在桌面上处理它的第三方应用程序。

【讨论】:

这是一个非常糟糕的建议,因为它会禁用所有 tel: 链接,即使用户安装了可以处理这些链接的应用程序!在台式计算机上,您可以使用 tel: 与 Skype 等第三方应用程序的链接。此外,此代码将禁用 tel:手机 Firefox 上的链接... 你是对的,这不是一个好习惯,只是一种解决方法。我为手机上的 Firefox 修复了它(请参阅我编辑的答案),但它确实仍然禁用了桌面上的 3rd-party 应用程序。【参考方案3】:

电话链接在 Firefox 中有效,如果没有安装电话应用程序,它会通知您为什么无法拨打该号码。这不是一条错误消息,正如 cmets 指出的那样,“解决方案”是不合适的。我在我的响应式网站中为 PC 用户使用此提示:

<a class="tel" href="tel:8001234567" 
    title="Clicking this link only works on a mobile phone">
  (800) 123-4567
</a>

虽然不是确切的事实,但它会向大多数没有安装电话应用程序的电脑用户解释,他们不应该将电话号码用作可点击的链接,而没有鼠标的移动用户永远不会请参阅工具提示。拥有手机应用的桌面用户可能会习惯于点击手机链接,并且还知道工具提示是为没有手机应用的桌面用户设计的。

我没有卸载我的邮件来测试相同的消息是否显示在带有href="mailto:..." 的锚标记上。该消息一般用于处理任何未安装的协议,因此对某些用户来说听起来有点神秘。

【讨论】:

【参考方案4】:

我希望我的脚注没有过时。

当前版本的 firefox 可以很好地处理 href="tel:(在 Windows 10 上,它要求我为电话定义所需的应用程序)。

但是:

在 tel-link 上的 onclick 事件之后,firefox 似乎仍然存在 AJAX 调用问题。

html

<a href="tel:01234567" onclick="log_action(123,'phonecall')">anynumber</a>

javascript(实验性):

function log_action(aid,action2)
$.getJSON('myscript_ajax.php', 
  action: "log_action",
  actionid: aid,
  action2: action2
  )
  .done(function(data)
     
    console.log(data);
  )                
  .error(function(jqXHR, textStatus, errorThrown) 
    console.log("error " + textStatus);
    console.log("incoming Text " + jqXHR.responseText);
  );

虽然 chrome 按预期记录来自 php 脚本的响应,但 firefox 会显示带有空文本状态和响应文本的错误通知。

如果安装了电话,也许 AJAX 请求可以正常工作,但我没有,并且开发服务器应用程序,我也不知道客户端是否有。

【讨论】:

以上是关于Firefox中的可点击电话协议标签的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Firefox 对“选择”标签上的“点击”事件的反应与 Webkit 和 IE 不同?

Linux中Firefox——Httpfox插件安装及使用

Javascript关闭IE6,IE7,IE8和Firefox没有确认框?

Firefox中的选择/选项html标签虚线轮廓问题

保存并打开Firefox和Chrome中的标签页

Firefox 中音频标签中的 MP3