21

一部の Javascript で Skype がインストールされているかどうかを検出できますか?

私が尋ねる理由は、それに基づいてリンクの href を変更したいからです: Skype がインストールされていない場合は、Skype とは何かとそのインストール方法を説明するポップアップを表示します。インストールされている場合は、リンクを次skype:my.contact.name?callのように変更します。クリックすると通話が開始されます。不動産の問題に​​より、リンクを 1 つだけ表示したいということです。

4

11 に答える 11

31

皆さんの回答に感謝します。リンクとメソッド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を使用している人が来た場合は、ブラウザに処理させるだけです。

編集:ページが読み込まれるたびではなく、ページが読み込まれたときにのみチェックを実行するように関数を再調整しました。この$.skype関数は、Skypeが検出されたかどうかを通知するブール値を返すようになりました

于 2008-12-11T06:15:00.430 に答える
7

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;
}
于 2008-12-11T04:07:18.643 に答える
4

nickfの信頼できる検出方法に基づいて、skypeのユーザー名をデータ属性( " data-skype ")に追加し、skypeがサポートされていない場合はすべてのtel:リンクのhref値を変更します。通常の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');
    }
});
于 2012-06-07T16:22:22.527 に答える
2

IE 用のスカイプ プラグインは DOM を変更するため、いつでも「ダミー」の電話番号フィールドをどこかに配置し、クラス名「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>
于 2008-12-11T04:10:51.773 に答える
1

JS でスカイプを検出しようとすると、画面の領域が不足してしまいます。

代わりに、「連絡先」リンクでユーザーを連絡先ページに移動させ、「skype:」リンクと説明用のスカイプ ダウンロード コンテンツを表示させると、全体がより使いやすくなる可能性があります。JSポップアップよりもはるかに便利です。

このページに「スカイプでこのページを再度表示しない」チェックボックスなど、いくつかの設定を追加できます。次に、その設定を使用して「連絡先」リンクを切り替えます。

于 2008-12-11T04:41:10.027 に答える
0

mimeTypesすべてのブラウザー プラグインは、 navigator オブジェクト を介してアクセスできるという名前のグローバル配列に MIME タイプを登録します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;
}});

したがって、これは、skype click2call プラグインがインストールされ、アクティブである場合$.checkPlugin("skype");に返されます。アクティブなプラグインがない場合、またはプラグインがインストールされていない場合truefalse

実際には、別のグローバル配列内を検索する必要があります —navigator.pluginsが、すべてのアクティブなプラグインのレコードがnavigator.mimeTypesにあり、これは少し簡単です。

于 2014-08-28T06:31:58.677 に答える
0

Fedora 12 でテストしたところ、Firefox やその他のブラウザーを使用する Linux プラットフォームでは、skype プロトコルが機能しません。

Linux skype がインストールされていても。

注意: 上記の参照は Windows プラットフォームに適しています

于 2010-07-24T18:50:00.720 に答える
0

W3C 標準を使用できます。ブラウザーは、通話を管理するためにインストールされているソフトウェアを判別します。

<a href="callto:<phone_number>"><phone_number></a>
于 2010-02-19T10:00:26.117 に答える
0

いいえ、Skype やその他のソフトウェアが Web ページからインストールされているかどうかを検出することは、アプリがユーザー エージェント文字列を .Net に変更するなど、情報を利用できるようにするために何か特別なことをしない限り、通常は検出できません。

于 2008-12-11T03:59:22.763 に答える
0

それは、javascript のセキュリティ ポリシーが望んでいることではありません。

プラグインやその他のサードパーティのものがなければ、そのような情報を取得することはできません. 不足しているプラ​​グインの情報のみを取得できますが、OS に不足しているソフトウェアは取得できません。

また、これを mac&linux&windows で同時に動作させるには問題があるはずです。

于 2008-12-11T04:05:40.690 に答える
-2

署名付きの Java アプレットを作成する価値があるかもしれません。そうすれば、少なくとも OS にアクセスして、Skype がそのようにインストールされているかどうかを判断できます。そうしないと、お気づきのように、Javascript はそのようなことを許可しません (許可した場合、コンピューターは既に侵害されている可能性があります)。

于 2008-12-11T04:29:16.947 に答える