2012-01-18 2 views

ответ

1

Вы можете использовать что-то вроде этого (имейте в виду, что это будет оставить заявление без signed_request):

if (document.location.protocol=='http:'){ 
    document.location.protocol = 'https:'; 
} 

Если вы хотите, родительский фрейм (сам Facebook), чтобы переключиться на HTTPS, а чем вы будете должны знать URL вашей страницы в приложении:

if (document.location.protocol=='http:'){ 
    window.top.location = 'https://YOUR_APPLICATION_PAGE_URL' 
} 

Вы, наверное, знаете URL шаблон для вашего приложения и сделать знать Canvas URL об этом, так что-то подобное может поместиться:

if (document.location.protocol=='http:'){ 
    var applicationUrl = 'https://facebook.com/example-application'; 
    var canvasURL = 'http://example.com/facebook-canvas'; 
    var currentAppPageUrl = (document.location+'').replace(canvasURL, applicationUrl); 
    window.top.location = currentAppPageUrl; 
} 
+0

Я попытался получить «window.top.location», , но я думаю, что facebook не любит меня. –

+0

Это не связано с Facebook, но кросс-доменная политика браузера. Короче: вы не можете получить window.top.location только для его установки! –

+0

Я пробовал этот код: '

' if (document.top.protocol=='http:'){ \t \t var applicationUrl = 'https://apps.facebook.com/app_name'; \t \t var canvasURL = 'https://www.app_name.com'; \t \t var currentAppPageUrl = (document.location+'').replace(canvasURL, applicationUrl); \t \t window.top.location = currentAppPageUrl; \t } '
' Это не работа. –

0

Canvas приложение на вашем домене и вершина в домене Facebook, поэтому вызов window.top.location внутри Facebook Canvas приложение вызывает перекрестную доступ домен URL из фрейма.

Все, что вам нужно, это поймать исключение через блок catch catch.

if (document.location.protocol=='http:'){ 
    var applicationUrl = 'https://facebook.com/example-application'; 
    var canvasURL = location.protocol+'//'+location.host+location.pathname; 
    var currentAppPageUrl = (document.location+'').replace(canvasURL, applicationUrl); 
    try { 
     window.top.location = currentAppPageUrl; 
    } catch (e) { 
    } 
} 
Смежные вопросы