我正在使用带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>
我显然不想满足于此,因为它搞砸了格式化并使按钮可滚动并且毫无意义。有人可以帮帮我吗?
答案 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)$/ }