Twitter小部件突然停止工作

时间:2016-03-10 20:30:17

标签: javascript angularjs twitter twitter-widget

我使用Twitter widgets.js在我的Angular应用中的页面上嵌入了一些推文。他们已经工作了相当长的一段时间。我今天注意到他们突然停止了工作。我一直试图调试这个问题,但无论我尝试什么,我似乎无法加载推文。控制台中没有错误。如果我从控制台手动初始化推文,代码似乎正常执行。我可以通过在then函数中将某些内容记录到控制台来验证这一点,该函数只有在twttr.widgets.createTweet()返回的承诺得到解决时才会被调用。

在我application.html.erb我有以下内容:

<!-- Twitter oEmbed Widget -->
<script>
    window.twttr = (function(d, s, id) {
        var js, fjs = d.getElementsByTagName(s)[0],
        t = window.twttr || {};
        if (d.getElementById(id)) return t;
        js = d.createElement(s);
        js.id = id;
        js.src = "https://platform.twitter.com/widgets.js";
        fjs.parentNode.insertBefore(js, fjs);

        t._e = [];
        t.ready = function(f) {
            t._e.push(f);
        };

        return t;
    }(document, "script", "twitter-wjs"));
</script>

在我的指令模板中,我指定一个带有Tweet id的div,如下所示:

<div class="fade" ng-show="!loading" ng-if="post.provider === 'twitter'" id="{{'post_' + post.id}}"></div>

然后在我的指令控制器中,我在延迟后初始化窗口小部件,以确保DOM准备就绪,如下所示:

function loadWidget() {
    if($scope.post.provider === 'twitter') {
        $timeout(function() {
            if(angular.element('#post_' + $scope.post.id).find('iframe').length === 0) {
                twttr.widgets.createTweet($scope.post.twitter_id, document.getElementById('post_' + $scope.post.id)).then(function(resp) {
                    $timeout(function() {
                        $scope.loading = false;
                    })
                });
            };
        }, 2500);
    };
};

如果我在debugger块中插入$timeout,我可以看到angular.element('#post_' + $scope.post.id)从DOM返回有效的div。如果我去我的帐户,我也可以确认我的推文在推特上。

此设置现在已经运行了一段时间。我还没有做出任何改变。事实上它只是在几个小时前工作!我想知道的是我如何调试它并找出它突然停止工作的原因。我检查了Twitter API的状态,并说它在过去24小时内有100%的正常运行时间。

更新

我设法在jsFiddle中重现了这个问题。据我所知,我用来测试的帐户中的推文似乎有问题。正如您在小提琴中所看到的,我指定了两个推文ID - tweetAtweetB - 然后嵌入它们。第一个是我的,无法加载。第二个加载得很好。

0 个答案:

没有答案