Как встроить канал Facebook в новые сайты Google (с помощью скрипта приложений)?

Я читал, что вы можете создать скрипт Google Apps, который показывает фид Facebook, а затем встроить его на сайт Google, но я не могу найти больше информации о том, как это сделать, и сам не могу понять. .

Когда я пытаюсь создать веб-приложение Apps Script с фидом Facebook, я получаю такие ошибки, как:

Uncaught DOMException: Failed to set the 'domain' property on 'Document': Assignment is forbidden for sandboxed iframes.

Это происходит из копирования «Facebook Javascript SDK» и «Page Feed» от разработчиков Facebook в файл HTML и его развертывания как веб-приложения. Я так понимаю, это как-то связано с тем, как Apps Script помещает ваш код в песочницу, но я не знаю, что мне здесь делать.

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


person Kenmore    schedule 23.06.2017    source источник


Ответы (2)


Новые сайты Google не поддерживают скрипт Google Apps.

Связанный вопрос: Скрипты приложений Google для новой версии Сайтов Google

person Rubén    schedule 23.06.2017
comment
Вот это да. Хорошо. Думаю, для меня это исключает его использование: / - person Kenmore; 26.06.2017

Новые сайты Google теперь поддерживают встраивание сценария приложений (обязательно разверните сценарий приложений как веб-приложение, установите правильные разрешения и используйте для встраивания URL-адрес / exec, а не ваш / dev).

Я обнаружил, что не могу использовать facebook SDK для видео из-за песочницы. Вместо этого я использовал решение iframe для видео, но, возможно, вы могли бы попробовать что-то подобное для канала (я предполагаю, что вы зарегистрировали свое приложение в fb, чтобы вы могли генерировать токены):

В сценарии приложений создайте файл .gs и html примерно в соответствии с приведенными ниже строками (я фактически не работал с возвращаемыми фидами, поэтому проверьте возвращаемую структуру данных и внесите соответствующие изменения)

//**feed.gs**
function doGet(e) {
  return HtmlService
         .createTemplateFromFile('my-html-file')
         .evaluate(); 
}

function getToken() {  //use your fb app info here (and make sure this script is protected / runs as you

    var url = 'https://graph.facebook.com'
    + '/oauth/access_token'
    + '?client_id=0000000000000000'
    + '&client_secret=0x0x0x0x0x0x0x0x0x0x0x0x'
    + '&grant_type=client_credentials';

    var response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true});
  
    var json = response.getContentText();
    var jsondata = JSON.parse(json);
  
    return jsondata.access_token;
  
}

function getFeed() {
  
    var url = 'https://graph.facebook.com'
    + '/your-page/feed'
    + '?access_token=' + encodeURIComponent(getToken());
  
    var response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true});
  
    var json = response.getContentText();
    var jsondata = JSON.parse(json);
    //Logger.log(jsondata);  //check this and adjust following for loop and html showFeed function accordingly
  
    var posts = {};

    for (var i in jsondata) {
        posts[i] = {"post":jsondata[i].message};
    }
  
    return posts;
    
}
<!--**my-html-file.html**-->
<!DOCTYPE html>
<html>
    <head>
        <base target="_top">

        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

        <script>
        // The code in this function runs when the page is loaded (asynchronous).
        $(function() {
            google.script.run
            .withSuccessHandler(showFeed)
            .withFailureHandler(onFailure)
            .getFeed();  //this function is back in .gs file and must return an array or object which gets auto-passed to the showFeed function below
        });
    
        function showFeed(posts) {  //parameter name must match array or object returned by getFeed in gs file
            var html = '';
            for (var p in posts) {
                html += '<p>' + posts[p].post + '</p>';  //instead of a string, you can build an array for speed
            }
            $('#feed').empty().append(html);  //if you used an array for the html, you'd split it here
        }
        function onFailure(error) {
            $('#feed').empty().append("Unable to retrieve feed: " + error.message); ;
        }
        </script>

    </head>
    <body>
    
        <div id="feed">
            Loading...
        </div>
   
    </body>
</html>

person kiden    schedule 29.10.2017