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

Может ли какой-то Javascript определить, установлен Skype или нет?

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

11.12.2008 03:49:37
11 ОТВЕТОВ

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

0
11.12.2008 03:59:22
Ну, вопрос, который я вижу, состоит в том, может ли что-нибудь справиться с URL «skype:». Какой скайп подойдет, если установлен. Что делает это актуальным и возможным. Все еще ищу решение для Safari.
akauppi 31.07.2010 08:07:19

Это не было бы тем, что хочет политика безопасности javascript.

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

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

0
11.12.2008 04:05:40

Работает в 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;
}
7
11.12.2008 04:34:35

Плагин skype для IE изменяет DOM, так что вы всегда можете где-нибудь иметь поле «фиктивного» номера телефона и искать любые внедренные элементы «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>
2
11.12.2008 04:21:33

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

-1
11.12.2008 04:29:16
это немного излишне для моих целей, правда. спасибо за ответ, хотя.
nickf 11.12.2008 05:36:44
Кроме того, крайне распространено отсутствие поддержки Java-апплета. (amd64 linux, как правило, работает таким образом, если вы не являетесь одним из раритетов, использующих IcedTea, а Skype не работает на Linux.)
Kent Fredric 11.12.2008 05:46:28
Никф - я предлагаю вам прочитать на JavaScript еще немного. kent - да, многие вещи не работают для amd64 linux
user45200 12.12.2008 02:09:55

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

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

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

1
11.12.2008 04:41:10

Спасибо всем за ответы: по ссылкам и методам 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функция вернет логическое значение, сообщающее, был ли обнаружен скайп или нет .

31
11.12.2008 06:25:34
@domii Я предполагаю, что jQuery удалил .browserобъект за последние 7 лет ...
nickf 12.11.2015 17:41:14

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

<a href="callto:<phone_number>"><phone_number></a>
0
20.02.2010 21:23:13
Ну, это не работает, если мы хотим, чтобы звонок в Skype вместо обычного пронумерованного.
akauppi 31.07.2010 08:00:41

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

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

NB. Вышеприведенные ссылки хороши для платформы Windows.

0
24.07.2010 18:50:00

Опираясь на надежные методы обнаружения nickf, я просто добавляю имя пользователя Skype для атрибута данных (« data-skype ») и изменяю значения href для всех ссылок tel: если Skype не поддерживается. Очень хорошо работает, глобальное приложение с обычным тел: гиперссылки остаются в такте, если 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
7.06.2012 16:48:09

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

Таким образом, вы можете использовать это для проверки плагин активен или нет. Если плагин установлен и отключен - никакой 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, и это немного проще.

0
28.08.2014 06:31:58