Следующее потенциальное решение не требует запроса дополнительных разрешений. Если вы добавите код плагина временной шкалы Facebook в скрытый DIV, вы можете подождать до завершения загрузки FB Canvas (или xfbml на веб-страницах) и проверить CSS-высоту этого элемента. Если у пользователя нет временной шкалы, он будет 0px. В противном случае, это будет 250px (как я включил). Это работает только в приложениях Facebook (не в Facebook для интеграции веб-страниц) :
Facebook скрывает этот элемент плагина, если пользователь не активировал временную шкалу, установив высоту стиля элемента на 0.
Добавьте это на страницу своего приложения:
<div id="timeline-hidden" style="display:none">
<div class="fb-add-to-timeline" data-show-faces="true"></div>
</div>
<div id="timeline-test"></div>
Затем в вашем javascript (используйте jQuery, FYI):
window.fbAsyncInit = function () {
FB.init({ ... }); // after your FB.init code
FB.Canvas.setDoneLoading(
function (result) {
var str_timeline;
var tlsrc = $("#timeline-hidden").find("iframe").first().css("height");
if("0px"==tlsrc)
str_timeline = '<h2 style="color:red">This user DOES NOT have timeline.<h2>';
else
str_timeline = "<h2>This user DOES have timeline.</h2>";
$("#timeline-test").html(str_timeline + ", timeline plugin css height:" + tlsrc + ", loadtime: " + result.time_delta_ms);
}
);
};
Следующее для Веб-интеграция несколько менее надежно из-за потенциальной задержки сети, но концепция может быть изменена на какое-то работоспособное решение:
Поскольку FB.Canvas.setDoneLoading не вызывается на веб-сайте, который включает интеграцию с FB, измените приведенную выше функцию FB.Canvas.setDoneLoading, чтобы подписаться на действие xfbml.render, и установите время ожидания для теста:
window.fbAsyncInit = function () {
FB.init ({...}); // после вашего кода FB.init
$(document).ready(function () {
FB.Event.subscribe('xfbml.render',
function () {
setTimeout( function(){
var str_timeline;
var tlsrc = $("#timeline-hidden").find("iframe").first().css("height");
if("0px"==tlsrc)
str_timeline = '<strong><span style="color:red">This user DOES NOT have timeline.</span></strong>';
else
str_timeline = "<strong>This user DOES have timeline.</strong>";
$("#timeline-test").html(str_timeline + ", timeline plugin css height:" + tlsrc);
}, 250);
}
);
});
* *} Тысяча двадцать-одина; * * тысяча двадцать две
В своем тестировании я обнаружил, что перемещение FB.Event.subscribe ('xfbml.render', в $ (документ) .ready (function () {... }); помогает с задержкой, когда ваше приложение встроено в страницу Facebook (загрузка занимает немного больше времени). Только что начал тестировать это, так что оно может выдержать или не выдержать дальнейшее тестирование.