电话锚链接无法使用jqtouch和phonegap

时间:2011-11-15 12:30:26

标签: cordova anchor jqtouch iscroll4

我正在使用带jqtouch的phonegap,我正在尝试非常简单地打开手机的原生手机应用程序并提示通话。我已尝试过以下各种变体:

<a href="tel:[NUMBER]" class="greenButton>Call number</a>

我尝试过rel =“external”

我尝试过使用href =“tel://”

我尝试过target =“_ blank”

我尝试过target =“_ webapp”

我甚至尝试添加class =“tel”并使用jQuery调用$(location).attr('href',this.href);

基本上,jqtouch必须拦截链接才能做到这一点,我无法弄清楚如何让它正常做事!

我发现了一些奇怪的事情...... 如果我将链接包装在iscroll包装器中,它就可以工作。

<div class="s-scrollwrapper">
<a href="tel:[NUMBER]" class="greenButton">Call number</a>
</div>

我显然不想满足于此,因为它搞砸了格式化并使按钮可滚动并且毫无意义。有人可以帮帮我吗?

5 个答案:

答案 0 :(得分:1)

在我的情况下,我通过添加以下选项设法解决了iScroll的问题:

  var options = {
    //other options
    onBeforeScrollStart: function (e) {
      var target = e.target;
      while (target.nodeType != 1) target = target.parentNode;
      if (target.tagName != 'SELECT' && target.tagName != 'INPUT' && target.tagName != 'TEXTAREA' && target.tagName != 'A') e.preventDefault();
    }
  };
  var myScroll = new iScroll(wrap, options);

答案 1 :(得分:0)

我试过了:

<a href="tel:[NUMBER]" rel="external" target="_webapp">Call number</a>

......它运作良好。

可能需要rel="external"(以阻止它尝试使用AJAX链接)和target="_webapp",以便它不会尝试打开Safari来处理链接。

答案 2 :(得分:0)

这确实是jqtouch拦截点击事件并防止默认行为的方式。我最终“修复”它的方式是使用调用按钮在页面上的内容周围放置一个's-scrollwrapper'div。我需要为应用程序的所有屏幕执行此操作,但对于此datazombies fork,它可能需要更好的方法来实现tel链接。

答案 3 :(得分:0)

您需要在iOS上使用target="_system"才能使tel:链接生效。

答案 4 :(得分:0)

如果有人遇到同样的问题,您可以在高级选项 http://iscrolljs.com/#advanced-options

部分中尝试选项preventDefaultException

来自iScroll 5 docs:

  

options.preventDefaultException

     

这些是preventDefault()被解雇时的所有例外情况   无论如何,尽管有preventDefault选项值。这很漂亮   强大的选项,如果你不想preventDefault()   例如,具有formfield类名的元素,您可以传递   以下内容:

preventDefaultException: { className: /(^|\s)formfield(\s|$)/ }
     

默认值:{ tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT)$/ }

所以你只需要在tagName值中添加一个A标签: { tagName: /^(INPUT|TEXTAREA|BUTTON|SELECT|A)$/ }