funciona - Javascript para detectar Skype?
javascript pdf (11)
Apoyándome en los métodos de detección confiables de nickf, simplemente agrego el nombre de usuario de skype a un atributo de datos (" data-skype ") y cambio los valores href para todos los enlaces tel: si skype no es compatible. Funciona muy bien, aplicación global con tel normal : los hipervínculos permanecen intactos si JavaScript está deshabilitado.
<!-- 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'');
}
});
¿Es posible que algún Javascript detecte si Skype está instalado o no?
La razón por la que pregunto es que me gustaría cambiar el href de un enlace basado en eso: si Skype no está instalado, muestre una ventana emergente explicando qué es Skype y cómo instalarlo, si está instalado, cambie el enlace a skype:my.contact.name?call
para que el clic comience una llamada. Los problemas inmobiliarios significan que prefiero que solo se muestre un enlace.
El plugin de Skype para IE modifica el DOM para que siempre puedas tener un campo de número de teléfono ''ficticio'' en algún lado y buscar cualquier elemento ''span'' insertado con el nombre de clase ''skype_tb_injection'' ...
Lo que estás buscando es algo como esto:
<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>
Eso no sería lo que quiere la política de seguridad de javascript.
Sin un complemento u otras cosas de terceros, nunca obtienes tales informaciones. Solo puede obtener información de complementos faltantes pero no de software faltante en su sistema operativo.
también debería ser problemático para que esto funcione en Mac & Linux y Windows al mismo tiempo.
Estaba probando en mi plataforma Fedora 12, Linux usando Firefox u otro navegador que no funciona con el protocolo de Skype.
Incluso teniendo instalado linux skype.
NB: las referencias anteriores son buenas para la plataforma de Windows
Funciona en IE y Firefox, pero no en Chrome u 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;
}
Gracias por las respuestas a todos: de los enlaces y métodos de seanb y algunos publicados, pude encontrar una solución que funciona para IE y Firefox, así que pensé en publicar una respuesta "completa". ¡Aquí está como una útil extensión de jQuery!
La extensión 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;
}
});
Uso
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.");
});
});
¡Y eso es!
Si aparece alguien que usa Safari, Opera o Chrome, permitirá que el navegador se encargue de él.
edit: rejigged la función para que solo realice la comprobación cuando se carga la página, no cada vez que se carga la página. La función $.skype
ahora devolverá un bool indicándole si se detectó skype o no .
No, generalmente no es posible detectar si skype o cualquier otro software está instalado desde una página web, a menos que la aplicación haga algo específico para que la información esté disponible, como modificar la cadena del agente de usuario a la .Net o si tiene una extensión especial para el navegador.
Puede usar el estándar W3C y el navegador determinará qué software está instalado para administrar llamadas:
<a href="callto:<phone_number>"><phone_number></a>
Puede valer la pena escribir un applet Java firmado. De esa forma, al menos, puede obtener acceso al sistema operativo y determinar si Skype está instalado de esa manera. De lo contrario, como notado, Javascript no permite ese tipo de cosas (si lo hiciera, su computadora ya estaría en peligro).
Suena como si estuvieras codificándote a ti mismo en un rincón de la esquina ... tratando de detectar Skype con JS, quedando sin espacio en la pantalla.
todo podría ser más amistoso si, en cambio, el enlace "Contacto" lleva al usuario a una página de contacto, con sus enlaces "skype:" y su contenido explicativo de descarga de skype. será un grupo más útil que una ventana emergente JS.
podría agregar algunas preferencias, como la casilla de verificación "Tengo Skype no mostrar esta página nuevamente" en esta página. Luego use esa tecla para alternar su enlace "Contacto".
Todos los complementos del navegador registran sus tipos mime en un conjunto global denominado mimeTypes
, al que se puede acceder a través del navegador navigator.mimeTypes
.
Entonces puede usar esto para comprobar el complemento activo o no. Si el complemento está instalado y deshabilitado, no se registrará ningún tipo de mime para ese complemento deshabilitado. Si el complemento está instalado y activo, tiene un registro tipo mime en navigator.mimeTypes
Algunas implementaciones de código usando jQuery:
jQuery.extend({checkPlugin: function(mimetype_substr) {
for (var i = 0; i < navigator.mimeTypes.length; i++) {
if (navigator.mimeTypes[i][''type''].toLowerCase().indexOf(mimetype_substr) >= 0) {
console.log("Gotcha! Here it is: "+navigator.mimeTypes[i][''type'']);
return true;
}
}
return false;
}});
Entonces esto: $.checkPlugin("skype");
devuelve true
si el complemento de skype click2call está instalado y activo. Y false
si no hay un plugin activo o no están instalados.
Realmente necesita buscar dentro de otra matriz global - navigator.plugins
, pero todos los complementos activos tienen sus registros en navigator.mimeTypes
, y esto es un poco más fácil.