Facebook Graph Call не работает в Internet Explorer 9 - PullRequest
0 голосов
/ 06 марта 2012

У меня есть функция JavaScript, которую я использую для вызова API Facebook и получения списка постов со стены.В Firefox, Chrome и Safari это работает без проблем, но в Internet Explorer 9 (я еще не тестировал ниже), он просто ничего не делает, пользовательский интерфейс остается заблокированным, но я не получаю никаких сообщений, которыеуказать на ошибку.У меня есть ощущение, что это может быть как-то связано с возвращаемым JSON и парсером Internet Explorer, но я не уверен в этом.

После обращения к Facebook SDK я сновареализовано с использованием этого (я не уверен, почему я оставил его до сих пор), и все это, кажется, теперь хорошо работает с Internet Explorer.

Старый код

var getFeed = function (name, type, limit, accessToken, apiKey, containerId) {
    var list_url = "https://graph.facebook.com/" + name + "/" + type + "?limit=" + limit + "&access_token=" + accessToken + "&api_key=" + apiKey;
    var html = "";

    displayHelper.blockUI(containerId, "Loading Feed");
    $.getJSON(list_url, function (json) {
        //Loop through and within the data array to retrieve the variables.
        $.each(json.data, function (i, fb) {
            var msg = (typeof (fb.message) != "undefined") ? fb.message : "";
            var link = (typeof (fb.link) != "undefined") ? fb.link : "";
            var pic = "";
            // msg = (typeof(fb.story) != "undefined") ? fb.story : msg;
            var type = (typeof (fb.type) != "undefined") ? fb.type : "";
            var includeInOutput = true;

            pic = getPicture(fb.from.id);

            switch (type) {
                case "story":
                    msg = fb.story;
                    break;
                case "link":
                    if (typeof (fb.message) != "undefined")
                        msg = fb.message;
                    else if (typeof (fb.caption) != "undefined")
                        msg = fb.caption;
                    else if (typeof (fb.story) != "undefined")
                        msg = fb.story;
                    else if (typeof (fb.name) != "undefined")
                        msg = fb.name;
                    break;
                case "video":
                case "photo":
                    if (typeof (fb.message) != "undefined")
                        msg = fb.message;
                    else if (typeof (fb.story) != "undefined")
                        msg = fb.story;
                    break;
                case "status":
                    if (typeof (fb.message) != "undefined")
                        msg = fb.message;
                    else if (typeof (fb.story) != "undefined")
                        msg = fb.story;
                    break;
                default:
                    includeInOutput = false;
                    break;
            }

            if (includeInOutput) {
                //build html for this list item
                html += '<dl class="fb-item">';
                html += "<dt>" + fb.from.name + "</dt>";
                html += (pic != '') ? '<dd class="img"><img src="' + pic + '" />' : '';
                html += '<dd class="msg">' + msg + '</dd>';

                /*html += '<a href="' + link + '" class="fb_link" target="_blank">'
                + msg  + "(" + type + ")"
                + "</a>";*/

                html += '<dd class="links">';
                html += '<span>' + fuzzyTime(fb.created_time.replace(/-/g, '/')) + '</span>';

                if (typeof (fb.actions) != "undefined") {
                    if (fb.actions[1].name == "Like")
                        html += "<a href='" + fb.actions[1].link + "' class='fb_link' target='_blank'>Like</a> - ";

                    if (fb.actions[0].name == "Comment")
                        html += "<a href='" + fb.actions[0].link + "' class='fb_link' target='_blank'>Comment</a>";
                }
                html += '</dd>';
                html += "</dl>";
            }

        }); /* end .each */

        //html += "</ul>";
        $(containerId).html(html);
        $(containerId).unblock();

    }); /* end getJSON */

} /* end hetFeed

Новый код - ОБНОВЛЕНО снова.Изображение не возвращалось, поэтому я извлек сообщение и собрал части в его собственный метод и построил сообщение при обратном вызове get get.Прежде чем я делал это блокирующим способом, просто неправильно!Надеюсь, это поможет кому-нибудь однажды.

var postMessage = function (fb, containerId) {
    FB.api("/" + fb.from.id + "/?fields=picture", {}, function (p) {
        var pic = p.picture;
        var msg = (typeof (fb.message) != "undefined") ? fb.message : "";
        var link = (typeof (fb.link) != "undefined") ? fb.link : "";
        var type = (typeof (fb.type) != "undefined") ? fb.type : "";
        var includeInOutput = true;
        var html = "";

        switch (type) {
            case "story":
                msg = fb.story;
                break;
            case "link":
                if (typeof (fb.message) != "undefined")
                    msg = fb.message;
                else if (typeof (fb.caption) != "undefined")
                    msg = fb.caption;
                else if (typeof (fb.story) != "undefined")
                    msg = fb.story;
                else if (typeof (fb.name) != "undefined")
                    msg = fb.name;
                break;
            case "video":
            case "photo":
                if (typeof (fb.message) != "undefined")
                    msg = fb.message;
                else if (typeof (fb.story) != "undefined")
                    msg = fb.story;
                break;
            case "status":
                if (typeof (fb.message) != "undefined")
                    msg = fb.message;
                else if (typeof (fb.story) != "undefined")
                    msg = fb.story;
                break;
            default:
                includeInOutput = false;
                break;
        }

        if (includeInOutput) {
            //build html for this list item
            html += '<dl class="fb-item">';
            html += "<dt>" + fb.from.name + "</dt>";
            html += (pic != '') ? '<dd class="img"><img src="' + pic + '" />' : '';
            html += '<dd class="msg">' + msg + '</dd>';

            /*html += '<a href="' + link + '" class="fb_link" target="_blank">'
            + msg  + "(" + type + ")"
            + "</a>";*/

            html += '<dd class="links">';
            html += '<span>' + fuzzyTime(fb.created_time.replace(/-/g, '/')) + '</span>';

            if (typeof (fb.actions) != "undefined") {
                if (fb.actions[1].name == "Like")
                    html += "<a href='" + fb.actions[1].link + "' class='fb_link' target='_blank'>Like</a> - ";

                if (fb.actions[0].name == "Comment")
                    html += "<a href='" + fb.actions[0].link + "' class='fb_link' target='_blank'>Comment</a>";
            }
            html += '</dd>';
            html += "</dl>";
        }

        $(containerId).append(html);
    });
}

var getFeed = function (name, type, limit, accessToken, apiKey, containerId) {

    var list_url = "https://graph.facebook.com/" + name + "/" + type + "?limit=" + limit + "&access_token=" + accessToken + "&api_key=" + apiKey;
    var fullHtml = "";

    helper.blockUI(containerId, "Loading Feed");
    var path = "/" + name + "/" + type;

    FB.api(path, { access_token: accessToken, api_key: apiKey, limit: limit }, function (json) {
        console.log(json);
        var data = json.data;
        for (var i = 0, l = data.length; i < l; i++) {
            var fb = data[i];

            postMessage(fb, containerId);

        } //End For

        $(containerId).unblock();
    });

} /* End getFeed */

1 Ответ

1 голос
/ 07 марта 2012

Вы можете попытаться использовать sdk в любом случае, чтобы вы могли лучше понять, где именно проблема с вашим кодом в IE.

Если вы сделаете это:

var path = name + "/" + type;
var params = limit == null ? {} : { limit: limit };

FB.api(path, "post", params, function(json) {
    ......
});

Он должен делать то же самое, что и код, который вы опубликовали (за исключением фактической обработки результатов).Если вы попробуете это, и это работает в IE, тогда проблема была в том, как вы общались с Facebook, в противном случае именно в той части, которая обрабатывает результаты от Facebook.

Одно точно, этот подход (использования SDK) проще и элегантнее, не говоря уже о том, что в этом случае изменения, внесенные Facebook без изменений, не затронут вас (в большинстве случаев).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...