Подтвердить что ты не робот

Javascript для обнаружения Skype?

Возможно ли, чтобы какой-нибудь Javascript обнаружил, установлен ли Skype или нет?

Я спрашиваю, что я хотел бы изменить ссылку href на основе этого: если Skype не установлен, покажите всплывающее окно, объясняющее, что такое Skype и как его установить, если оно установлено, измените ссылку до skype:my.contact.name?call, чтобы щелчок начал вызов. Проблемы с недвижимостью означают, что я предпочел бы показывать только одну ссылку.

4b9b3361

Ответ 1

Спасибо за ответы всем: от ссылок и методов seanb и некоторых опубликованных, я смог придумать решение, которое работает для IE и Firefox, поэтому я решил опубликовать "полный" ответ. Здесь это как удобное расширение jQuery!

Расширение 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, он просто позволит браузеру справиться с этим.

edit: переназначить функцию так, чтобы она выполняла проверку только при загрузке страницы, а не при каждой загрузке страницы. Функция $.skype теперь вернет bool, сообщив вам, был ли обнаружен скайп или нет.

Ответ 2

Работает в 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;
}

Ответ 3

Опираясь на надежные методы обнаружения nickf, я просто добавляю имя пользователя skype к атрибуту данных ( " data-skype" ) и изменяю значения href для всех tel: ссылки, если skype не поддерживается. Работает очень хорошо, глобальное приложение с нормальными tel: гиперссылками, остающимися в такте, если 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');
    }
});

Ответ 4

Плагин skype для IE изменяет DOM, поэтому вы всегда можете найти поле номера телефона 'dummy' и искать любые внедренные элементы span с классом "skype_tb_injection"...

То, что вы ищете, выглядит примерно так:

<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">&nbsp;</SPAN>
  <SPAN onmouseup="..." class="skype_tb_imgA_flex" onmousedown="..." id="skype_tb_droppart_0" onmouseover="..." title="Skype actions" style="..." onclick="..." onmouseout="...">
    &nbsp;&nbsp;
    <SPAN class="skype_tb_nop">&nbsp;</SPAN>
    <SPAN class="skype_tb_imgFlag" id="skype_tb_img_f0" style="...">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN>
    &nbsp;
    <SPAN class="skype_tb_nop">&nbsp;</SPAN>
  </SPAN>
  <SPAN class="skype_tb_imgS" id="skype_tb_img_s0" style="...">&nbsp;</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="...">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
    <SPAN class="skype_tb_nop">&nbsp;</SPAN>
  </SPAN>
</SPAN>

Ответ 5

звучит так, будто вы кодируете себя в какой-то уголок. пытаетесь обнаружить skype с JS, закончив экранную недвижимость.

все это может быть более дружелюбным, если вместо этого ссылка "Контакт" выводит пользователя на страницу контактов с вашими ссылками "skype:" и вашим объяснительным содержанием загрузки скайпа. это будет более полезной, чем всплывающее окно JS.

вы можете добавить некоторые префы, например, "я пока не показываю эту страницу снова". Затем используйте этот префикс для переключения ссылки "Контакт".

Ответ 6

Нет, обычно невозможно определить, установлено ли скайп или какое-либо другое программное обеспечение с веб-страницы, если приложение не делает что-то конкретное, чтобы сделать доступную информацию, например, изменить строку пользовательского агента a la.Net или у вас есть специальный браузер расширение,

Ответ 7

Это не та политика безопасности javascript.

Без плагина или другого материала третьей стороны вы никогда не получите такую ​​информацию. Вы можете получать информацию о отсутствующих плагинах, но не пропускать программное обеспечение в своей ОС.

также должно быть проблематично, чтобы заставить эту работу работать с Mac & linux & windows в то же время.

Ответ 8

Вы можете использовать стандарт W3C, и браузер определит, какое программное обеспечение установлено для управления вызовами:

<a href="callto:<phone_number>"><phone_number></a>

Ответ 9

Я просто тестировал на своей платформе Fedora 12, Linux, используя firefox или другой браузер, не работает протокол skype.

Даже если установлен linux skype.

N.B: выше ссылки подходят для платформы Windows

Ответ 10

Все плагины браузера, регистрирующие свои mime-типы в глобальном массиве с именем mimeTypes, к которому можно получить доступ через объект навигатора navigator.mimeTypes.

Итак, вы можете использовать это для плагина check active или нет. Если плагин установлен и отключен - никакой тип mime не будет зарегистрирован для этого отключенного плагина. Если плагин установлен и активен - у него есть запись типа mime в navigator.mimeTypes

Некоторая реализация кода с использованием 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;
}});

Итак, это: $.checkPlugin("skype"); возвращает true, если плагин skype click2call установлен и активен. И false, если активный плагин или плагин не установлены.

На самом деле нужно искать в другом глобальном массиве - navigator.plugins, но все активные плагины имеют свои записи в navigator.mimeTypes, и это немного проще.

Ответ 11

Возможно, стоит написать подписанный Java-апплет. Таким образом, вы, по крайней мере, можете получить доступ к ОС и определить, установлен ли Skype таким образом. В противном случае, как заметил, Javascript не допускает такого рода вещи (если бы это произошло, ваш компьютер был бы уже скомпрометирован).