0

AngularJS を使用してプロジェクトにスカイプ ボタンを追加しようとしています。コードは次のとおりです。

HTML:

<script type="text/javascript" src="http://www.skypeassets.com/i/scom/js/skype-uri.js"></script>

<skype-ui id="SkypeButton_Call_1" participants="participants">
                </skype-ui>

AngularJ:

app.directive("skypeUi", function () {
    return {
        restrict: "E",
        template: "<div></div>",
        replace: true,
        scope: {
            participants: "="
        },
        link: function (scope, element, attrs) {
            Skype.ui({
                "name": "chat",
                "element": attrs.id,
                "participants": scope.participants,
                "imageSize": 32
            });
        }
    };
});

しかし、それをクリックするとSkypeウィンドウが開き、同時にエラーメッセージが表示されます:「この電話をかけるか、メッセージを送信するには、Skypeアプリケーションをインストールしてください。」私のシステムにはすでにスカイプがインストールされています。なぜそのように表示されるのか教えてください。

4

1 に答える 1

0

同じ問題がありました...問題は、それskype-uri.jsがかなり醜く書かれていることです...

グローバル変数Skypeをエクスポートしますが、共有機能を持つ名前空間ではありません-それはオブジェクトインスタンスであり、私が見つけたように-そのインスタンスは1つのSkypeボタンのみを適切に初期化できます... facepalm ...

別のものを追加するには、そのスクリプトをもう一度含める必要があります(そのオブジェクトの新しいインスタンスを作成するため)、またはそのインスタンスからコンストラクターを取得し、それを使用して新しいコンストラクターを作成します...

ここに作業ディレクティブがあります:

app.directive("skypeUi", function () {
  var TrueSkype = Skype.constructor;
  return {
    restrict: 'E',
    scope: {
      participants: "="
    },
    link: function (scope, element) {
      var btn = null;
      function removeButton() {
        if (btn) {
          btn.remove();
        }
      }
      scope.$watch('participants', function () {
        removeButton();
        btn = angular.element('<div></div>');
        var id = "SkypeButton_Call_" + Math.random();
        element.append(btn);
        btn.attr('id', id);
        (new TrueSkype()).ui({
          "name": "call",
          "element": id,
          "participants": participants,
          "imageColor": "white",
          "imageSize": 32
        });
      });
      scope.$on('$destroy', removeButton);
    }
  };
});
于 2015-05-05T12:02:33.213 に答える