如何在新的 Google 网站中嵌入 Facebook 动态(使用 Apps 脚本)?
How do I embed a Facebook Feed in the new Google Sites (using Apps Script)?
我了解到您可以制作一个显示 Facebook Feed 的 Google Apps 脚本,然后将其嵌入到 Google 网站中,但我找不到更多信息怎么弄,我自己也想不通。
当我尝试使用 Facebook 提要制作 Apps 脚本网络应用程序时,出现如下错误:
Uncaught DOMException: Failed to set the 'domain' property on 'Document': Assignment is forbidden for sandboxed iframes.
这是将 Facebook 开发人员的 "Facebook Javascript SDK" 和 "Page Feed" 复制到 HTML 文件并将其部署为 Web 应用程序。我想这与 Apps Script 如何将您的代码沙盒化有关,但我不知道我必须在这里做什么。
就此而言,即使我尝试使用一些静态 HTML 制作更简单的 Apps 脚本,当我尝试将其从云端硬盘嵌入网站时,我也会收到错误 "Some of the selected items could not be embedded"。
新 Google 站点不支持 Google Apps 脚本。
相关问题:
新的 Google Sites 现在支持嵌入应用程序脚本(确保将应用程序脚本部署为 Web 应用程序,设置正确的权限,并使用 /exec url 而不是您的/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>
我了解到您可以制作一个显示 Facebook Feed 的 Google Apps 脚本,然后将其嵌入到 Google 网站中,但我找不到更多信息怎么弄,我自己也想不通。
当我尝试使用 Facebook 提要制作 Apps 脚本网络应用程序时,出现如下错误:
Uncaught DOMException: Failed to set the 'domain' property on 'Document': Assignment is forbidden for sandboxed iframes.
这是将 Facebook 开发人员的 "Facebook Javascript SDK" 和 "Page Feed" 复制到 HTML 文件并将其部署为 Web 应用程序。我想这与 Apps Script 如何将您的代码沙盒化有关,但我不知道我必须在这里做什么。
就此而言,即使我尝试使用一些静态 HTML 制作更简单的 Apps 脚本,当我尝试将其从云端硬盘嵌入网站时,我也会收到错误 "Some of the selected items could not be embedded"。
新 Google 站点不支持 Google Apps 脚本。
相关问题:
新的 Google Sites 现在支持嵌入应用程序脚本(确保将应用程序脚本部署为 Web 应用程序,设置正确的权限,并使用 /exec url 而不是您的/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>