某些 Javascript 是否可以检测是否安装了 Skype?
我问的原因是我想基于此更改链接的 href:如果未安装 Skype,则显示一个弹出窗口,说明 Skype 是什么以及如何安装它,如果已安装,请将链接更改skype:my.contact.name?call
为单击将开始通话。房地产问题意味着我宁愿只显示一个链接。
某些 Javascript 是否可以检测是否安装了 Skype?
我问的原因是我想基于此更改链接的 href:如果未安装 Skype,则显示一个弹出窗口,说明 Skype 是什么以及如何安装它,如果已安装,请将链接更改skype:my.contact.name?call
为单击将开始通话。房地产问题意味着我宁愿只显示一个链接。
感谢大家的回答:从 seanb 和一些发布的链接和方法中,我能够想出一个适用于 IE 和 Firefox 的解决方案,所以我想我会发布一个“完整”的答案。这是一个方便的 jQuery 扩展!
jQuery.extend({
skype : function(failureFunction) {
var $ = jQuery;
if ($.browser.safari || $.browser.opera) {
return true;
} else if ($.browser.msie) {
try {
if (new ActiveXObject("Skype.Detection")) return true;
} catch(e) { }
} else {
if (typeof(navigator.mimeTypes["application/x-skype"]) == "object") {
return true;
}
}
$('a[href^="skype:"]').click(function() {
failureFunction();
return false;
});
return false;
}
});
HTML:
<a href="skype:your.skype.username?call">Call me</a>
<a href="skype:your.skype.username?add">Add me</a>
Javascript:
jQuery(function($) {
$.skype(function() {
// this function gets called if they don't have skype.
alert("Looks like you don't have skype. Bummer.");
});
});
就是这样!
如果有人使用 Safari、Opera 或 Chrome,它只会让浏览器处理。
编辑:重新调整该功能,使其仅在页面加载时执行检查,而不是每次加载页面时执行检查。该$.skype
函数现在将返回一个布尔值,告诉您是否检测到 Skype。
适用于 IE 和 Firefox,但不适用于 Chrome 或 Opera
function isSkypeInstalled(str) {
try {
/*@cc_on
//The Microsoft way, thanks to the conditional comments only run in IE
if (new ActiveXObject("Skype.Detection")) return true;
@*/
//Tested for firefox on win
if (navigator.mimeTypes["application/x-skype"]) return true;
}
catch(e){}
return false;
}
依靠 nickf 可靠的检测方法,我只需将 Skype 用户名添加到数据属性(“ data-skype ”),并在不支持 Skype 的情况下更改所有tel:链接的 href 值。效果非常好,具有普通电话的全局应用程序:如果禁用 Javascript,超链接将保持原样。
<!-- the links -->
<a href="tel:+15035551212" data-skype="yourskypeusername" title="Call">Call</a>
/* the javascript*/
function hasSkype() {
if ($.browser.safari || $.browser.opera) {
return true;
} else if ($.browser.msie) {
try {
if (new ActiveXObject("Skype.Detection")) return true;
} catch(e) { }
} else {
if (typeof(navigator.mimeTypes["application/x-skype"]) == "object") {
return true;
}
}
return false;
}
$('a[href^="tel:"]').each(function() {
if(hasSkype()) {
// if Skype is available, update the link to use Skype
$(this).attr('href','skype:'+$(this).attr('data-skype')+'?call');
}
});
适用于 IE 的 Skype 插件会修改 DOM,因此您始终可以在某处拥有一个“虚拟”电话号码字段,并注意任何注入的类名为“skype_tb_injection”的“span”元素...
你正在寻找的是这样的:
<SPAN onmouseup=".." class="skype_tb_injection" onmousedown="..." id="softomate_highlight_0" onmouseover="..." title="Call this phone number in Thailand with Skype: +66812341234" onclick="..." onmouseout="..." durex="0" context="+66 8 1234 1234" IamRTL="0">
<SPAN class="skype_tb_nop"> </SPAN>
<SPAN onmouseup="..." class="skype_tb_imgA_flex" onmousedown="..." id="skype_tb_droppart_0" onmouseover="..." title="Skype actions" style="..." onclick="..." onmouseout="...">
<SPAN class="skype_tb_nop"> </SPAN>
<SPAN class="skype_tb_imgFlag" id="skype_tb_img_f0" style="..."> </SPAN>
<SPAN class="skype_tb_nop"> </SPAN>
</SPAN>
<SPAN class="skype_tb_imgS" id="skype_tb_img_s0" style="..."> </SPAN>
<SPAN class="skype_tb_injectionIn" id="skype_tb_text0" style="...">
<SPAN class="skype_tb_innerText" id="skype_tb_innerText0"> +6...</SPAN>
</SPAN>
<SPAN class="skype_tb_imgR" id="skype_tb_img_r0" style="...">
<SPAN class="skype_tb_nop"> </SPAN>
</SPAN>
</SPAN>
听起来你正在把自己编码到一个角落里..试图用 JS 检测 Skype,但屏幕空间不足。
整个事情可能会更友好,如果相反,“联系”链接将用户带到一个联系页面,其中包含您的“Skype:”链接和解释性的 Skype 下载内容。它会比 JS 弹出窗口更有用。
您可以在此页面上添加一些首选项,例如“我使用 Skype 不再显示此页面”复选框。然后使用该首选项切换您的“联系方式”链接。