Небезопасная попытка JavaScript получить доступ к фрейму при использовании безопасного просмотра в Facebook - PullRequest
2 голосов
/ 07 февраля 2012

Я запустил приложение на прошлой неделе и с тех пор заметил, что в Chrome не всегда регулируется только высота моего холста.Я потратил кучу часов на изучение проблем и заметил, что получаю следующую ошибку - иногда.

Unsafe JavaScript attempt to access frame with URL https://apps.facebook.com/tabletr/ from frame with URL

http://static.ak.facebook.com/connect/canvas_proxy.php?version=3#behavior=p&method=getPageInfo&params=%7B%22channelUrl%22%3A%22https%3A%2F%2Fs-static.ak.fbcdn.net%2Fconnect%2Fxd_proxy.php%3Fversion%3D3%23cb%3Df3782154e%26origin%3Dhttps%253A%252F%252Ftabletr.herokuapp.com%252Ff2951037b%26relation%3Dtop.frames%255Biframe_canvas_fb_https%255D%26transport%3Dpostmessage%22%2C%22frame%22%3A%22iframe_canvas_fb_https%22%7D&relation=top. Домены, протоколы и порты должны совпадать.

Теперь, зная кое-что о программировании, я понял, что это, вероятно, связано с взаимозаменяемостью https и http.Я получаю сообщение об ошибке (иногда) с безопасным просмотром «вкл.» На Facebook и никогда не с «выключенным».

Но то, что я нахожу действительно странным, это то, что проблема возникает спорадически при просмотре по HTTPS.Я до сих пор не нашел ни одного паттерна для возникающей проблемы, или мой код работает как задумано.Я знаю, что здесь есть несколько постов на эту тему, и я попробовал несколько обходных путей, но ни один, похоже, не решил мою проблему.Вот часть моего кода -

<div id="fb-root"></div>
<script>
    window.fbAsyncInit = function() {
        FB.init({
            appId      : '<myid>', // App ID
            channelUrl : '//tabletr.herokuapp.com/channel.php', // Channel File
            status     : false, // Check login status
            cookie     : true, // Enable cookies to allow the server to access the session
            xfbml      : false  // Parse XFBML
        });

        // Additional initialization code here
        FB.Canvas.setSize({ height: 1200 });
    };

    // If I comment out this function I don't get any unsafe URL errors
    // anymore. I'm guessing that the include of the JavaScript code either
    // fails to use the right protocol or is faulty in its implementation
    // by Facebook. My money is on the former.
    (function(d){
        var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
        js = d.createElement('script'); js.id = id; js.async = true;
        //js.src = "//connect.facebook.net/en_US/all.js";
        js.src = "//tabletr.herokuapp.com/js/all.js";
        d.getElementsByTagName('head')[0].appendChild(js);
    }(document));
</script>

Как мне это исправить?Я из них, если честно.Может быть, моя реализация файла канала неверна?

Обновлен код

<div id="fb-root"></div>
<script>
    window.fbAsyncInit = function() {
        FB.init({
            appId      : '<myid>', // App ID
            channelUrl : '//tabletr.herokuapp.com/channel.php', // Channel File
            status     : false, // Check login status
            cookie     : true, // Enable cookies to allow the server to access the session
            xfbml      : false  // Parse XFBML
        });

        // Additional initialization code here
        FB.Canvas.setSize({ height: 1200 });
    };

    // If I comment out this function I don't get any unsafe URL errors
    // anymore. I'm guessing that the include of the JavaScript code either
    // fails to use the right protocol or is faulty in its implementation
    // by Facebook. My money is on the former.
    (function(d){
        var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
        js = d.createElement('script'); js.id = id; js.async = true;
        js.src = "//connect.facebook.net/en_US/all.js";
        //js.src = "//tabletr.herokuapp.com/js/all.js";
        d.getElementsByTagName('head')[0].appendChild(js);
    }(document));
</script>

Я обновил свой код, основываясь на вопросе Stack OVerflow Facebook JavaScript SDK через HTTPS загрузка небезопасные элементы - это, однако, еще не решило проблему.Я обнаружил следующий отчет об ошибке 2012-01-19, в котором показаны те же симптомы, с которыми я сталкиваюсь.Скрестив пальцы, это будет исправлено в ближайшее время Facebook!

https://developers.facebook.com/bugs/192507854181725?browse=search_4f2bbd593f8798794293016

Ответы [ 4 ]

3 голосов
/ 07 февраля 2012
 //js.src = "//connect.facebook.net/en_US/all.js";
 js.src = "//tabletr.herokuapp.com/js/all.js";

Похоже, вы скопировали http://connect.facebook.net/en_US/all.js на локальный сервер как https://tabletr.herokuapp.com/js/all.js.

Различия http://connect.facebook.net/en_US/all.js и https://connect.facebook.net/en_US/all.js показывают несколько URL-адресов с жестко закодированными "http" и "https" соответственно. Если вы хотите скопировать их локально, вам придется разместить две отдельные версии, как это делает Facebook.

Но я бы посоветовал просто указать официальный скрипт Facebook, чтобы вам не приходилось постоянно его синхронизировать.

1 голос
/ 03 мая 2015

Это также может произойти, если вы неправильно настроили ваше приложение fb, проверьте следующие три шага

1 - убедитесь, что redirect_uri вашего приложения на Facebook не пропущено

Перейдите в приложение >> Настройки >> Дополнительно >> Безопасность. затем установите redirect_uri

2- Убедитесь, что для вашего приложения разрешены логин Client OAuth Login и Embedded browser OAuth Login

Перейдите в приложение >> Настройки >> Дополнительно >> Безопасность. затем выберите «да» для Client OAuth Login и Embedded browser OAuth Login

3 - Не забудьте также настроить приложение для приема входов с вашего сайта

Перейдите в приложение >> Настройки >> Добавить платформу >> Веб-сайт. затем установите Site URL с вашим доменом.

0 голосов
/ 02 марта 2012

Facebook признал это ошибкой и назначил инженера.Вы можете отслеживать прогресс на https://developers.facebook.com/bugs/192507854181725?browse=search_4f2bbd593f8798794293016

0 голосов
/ 07 февраля 2012

Вполне возможно.

Ваше сообщение об ошибке гласит:

Домены, протоколы и порты должны совпадать

Вы получаете доступ к кадру с помощью скриптавключены из

https://apps.facebook.com/tabletr/

из фрейма с URL

http://static.ak.facebook.com/connect/canvas_proxy.php? ...

Так что это выглядит как несоответствие http / https.Я не думаю, что это распространяется на субдомены, но это может быть проблематично.

Но это ваш код или фреймворк?По сути, вы должны убедиться, что оба протокола совпадают в безопасном или обычном сценарии просмотра.

...