如何使用 Google 个应用程序脚本为 Google 个站点创建动态组件?
How can I create dynamic components with Google App Scripts for Google Sites?
我正在尝试创建动态应用程序脚本组件,这些组件可以添加到我的站点中,其中包含每个脚本实例的动态数据。我试过做参数,但我不确定这是否是解决这个问题的最佳方法。例如,我想创建一个加载动态链接并插入 google 个站点的图像脚本。我只希望一个图像脚本可以多次加载到具有动态 url 的页面中。我该如何处理?这可以做到吗?谢谢
这是一个简单的例子:
image.html 文件:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div id="data">
<br /><img id="img1" src="" alt="img1" width="300" />
<br /><img id="img2" src="" alt="img2" width="300" />
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$(function() {
google.script.run
.withSuccessHandler(setURL)
.getURL();
});
function setURL(urlA)
{
for(var i=0;i<urlA.length;i++)
{
var s='img' + Number(i+1);
document.getElementById(s).src=urlA[i];
}
}
console.log('My Code');
</script>
</body>
</html>
Code.gs 文件:
function doGet()
{
var html = HtmlService.createHtmlOutputFromFile('image');
return html.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL)
}
function getURL()
{
var ss=SpreadsheetApp.openById('id');
var sht=ss.getSheetByName('imgURLs');
var rng=sht.getDataRange();
var rngA=rng.getValues();
var urlA=[];
for(var i=1;i<rngA.length;i++)
{
urlA.push(rngA[i][0]);
}
return urlA;
}
这从 sheet 获取图像 url 并使用适当的 Spreadsheet ID 命名为 'imgURLs' 我只使用 A 列(只使用 A2 和 A3现在,但您可以使用 1 个或多个图像。您可以将其另存为 Web 应用程序并转到经典站点 select 插入 google 应用程序并从发布中输入 Web 应用程序 url菜单就是这样。
- 转到“管理站点”->“Apps 脚本”以将新脚本嵌入到您的经典站点中。
创建一个新函数来构建您需要的动态html
function makePage() {
var page = SitesApp.getCurrentPage();
//create your html
page.setHtmlContent()
}
添加将调用 makePage() 的 doGet 方法
function doGet(e) {
makePage();
}
将脚本发布为 Web 应用程序,将脚本设置为 运行。将 url 添加到您的脚本中。
有多种方法可以强制从您的页面执行此代码。一种机制是在您的站点页面上插入对 App Script 的调用。在小工具向导中为您的 App Script 网络应用程序提供 URL。
此版本创建滚动图像显示或幻灯片放映。并且它在一个空的 div 中创建图像标签。您可以将尽可能多的图像添加到电子表格的 A 列,脚本会完成剩下的工作。
image.html:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div id="myimages"></div>
<div id="slideshow" style="display:none;">
<img id="slide" src="" width="450"/>
</div>
<input type="button" value="Start Slide Show" onClick="startShow();" />
<input type="button" value="Stop Show" onClick="stopShow();" />
<div id="resp" style="display:none;">
<h1>Response</h1>
<p>Your data has been received.</p>
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
var nextslide=0;
var myslides='';
var mytimer;
$(function() {
google.script.run
.withSuccessHandler(setURL)
.getURL();
});
function setURL(urlA)
{
for(var i=0;i<urlA.length;i++)
{
var s='img' + Number(i+1);
var s1= '#img' + Number(i+1);
$('#myimages').append('<img id="' + s + '" src="' + urlA[i] + '" />');
$(s1).attr('height','450');
}
myslides=urlA;
}
function startShow()
{
$('#myimages').css('display','none');
$('#slideshow').css('display','block');
showSlide();
}
function showSlide()
{
document.getElementById('slide').src=myslides[nextslide];
if(++nextslide > myslides.length-1)
{
nextslide=0;
}
mytimer=window.setTimeout(showSlide,5000);
}
function stopShow()
{
window.clearTimeout(mytimer);
$('#myimages').css('display','block');
$('#slideshow').css('display','none');
}
function loadTxt(from,to)
{
document.getElementById(to).value = document.getElementById(from).value;
}
console.log('My Code');
</script>
</body>
</html>
Code.gs
function doGet()
{
var html = HtmlService.createHtmlOutputFromFile('image');
return html.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL)
}
function getData(a)
{
var ts = Utilities.formatDate(new Date(), "GMT-6", "yyyy-MM-dd' 'HH:mm:ss");
a.push(ts);
var ss=SpreadsheetApp.openById('SS_ID')
ss.getSheetByName('Form Data').appendRow(a);
return true;
}
function getURL()
{
var ss=SpreadsheetApp.openById('SS_ID');
var sht=ss.getSheetByName('imgURLs');
var rng=sht.getDataRange();
var rngA=rng.getValues();
var urlA=[];
for(var i=1;i<rngA.length;i++)
{
urlA.push(rngA[i][0]);
}
return urlA;
}
我正在尝试创建动态应用程序脚本组件,这些组件可以添加到我的站点中,其中包含每个脚本实例的动态数据。我试过做参数,但我不确定这是否是解决这个问题的最佳方法。例如,我想创建一个加载动态链接并插入 google 个站点的图像脚本。我只希望一个图像脚本可以多次加载到具有动态 url 的页面中。我该如何处理?这可以做到吗?谢谢
这是一个简单的例子:
image.html 文件:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div id="data">
<br /><img id="img1" src="" alt="img1" width="300" />
<br /><img id="img2" src="" alt="img2" width="300" />
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$(function() {
google.script.run
.withSuccessHandler(setURL)
.getURL();
});
function setURL(urlA)
{
for(var i=0;i<urlA.length;i++)
{
var s='img' + Number(i+1);
document.getElementById(s).src=urlA[i];
}
}
console.log('My Code');
</script>
</body>
</html>
Code.gs 文件:
function doGet()
{
var html = HtmlService.createHtmlOutputFromFile('image');
return html.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL)
}
function getURL()
{
var ss=SpreadsheetApp.openById('id');
var sht=ss.getSheetByName('imgURLs');
var rng=sht.getDataRange();
var rngA=rng.getValues();
var urlA=[];
for(var i=1;i<rngA.length;i++)
{
urlA.push(rngA[i][0]);
}
return urlA;
}
这从 sheet 获取图像 url 并使用适当的 Spreadsheet ID 命名为 'imgURLs' 我只使用 A 列(只使用 A2 和 A3现在,但您可以使用 1 个或多个图像。您可以将其另存为 Web 应用程序并转到经典站点 select 插入 google 应用程序并从发布中输入 Web 应用程序 url菜单就是这样。
- 转到“管理站点”->“Apps 脚本”以将新脚本嵌入到您的经典站点中。
创建一个新函数来构建您需要的动态html
function makePage() { var page = SitesApp.getCurrentPage(); //create your html page.setHtmlContent() }
添加将调用 makePage() 的 doGet 方法
function doGet(e) { makePage(); }
将脚本发布为 Web 应用程序,将脚本设置为 运行。将 url 添加到您的脚本中。
有多种方法可以强制从您的页面执行此代码。一种机制是在您的站点页面上插入对 App Script 的调用。在小工具向导中为您的 App Script 网络应用程序提供 URL。
此版本创建滚动图像显示或幻灯片放映。并且它在一个空的 div 中创建图像标签。您可以将尽可能多的图像添加到电子表格的 A 列,脚本会完成剩下的工作。
image.html:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div id="myimages"></div>
<div id="slideshow" style="display:none;">
<img id="slide" src="" width="450"/>
</div>
<input type="button" value="Start Slide Show" onClick="startShow();" />
<input type="button" value="Stop Show" onClick="stopShow();" />
<div id="resp" style="display:none;">
<h1>Response</h1>
<p>Your data has been received.</p>
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
var nextslide=0;
var myslides='';
var mytimer;
$(function() {
google.script.run
.withSuccessHandler(setURL)
.getURL();
});
function setURL(urlA)
{
for(var i=0;i<urlA.length;i++)
{
var s='img' + Number(i+1);
var s1= '#img' + Number(i+1);
$('#myimages').append('<img id="' + s + '" src="' + urlA[i] + '" />');
$(s1).attr('height','450');
}
myslides=urlA;
}
function startShow()
{
$('#myimages').css('display','none');
$('#slideshow').css('display','block');
showSlide();
}
function showSlide()
{
document.getElementById('slide').src=myslides[nextslide];
if(++nextslide > myslides.length-1)
{
nextslide=0;
}
mytimer=window.setTimeout(showSlide,5000);
}
function stopShow()
{
window.clearTimeout(mytimer);
$('#myimages').css('display','block');
$('#slideshow').css('display','none');
}
function loadTxt(from,to)
{
document.getElementById(to).value = document.getElementById(from).value;
}
console.log('My Code');
</script>
</body>
</html>
Code.gs
function doGet()
{
var html = HtmlService.createHtmlOutputFromFile('image');
return html.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL)
}
function getData(a)
{
var ts = Utilities.formatDate(new Date(), "GMT-6", "yyyy-MM-dd' 'HH:mm:ss");
a.push(ts);
var ss=SpreadsheetApp.openById('SS_ID')
ss.getSheetByName('Form Data').appendRow(a);
return true;
}
function getURL()
{
var ss=SpreadsheetApp.openById('SS_ID');
var sht=ss.getSheetByName('imgURLs');
var rng=sht.getDataRange();
var rngA=rng.getValues();
var urlA=[];
for(var i=1;i<rngA.length;i++)
{
urlA.push(rngA[i][0]);
}
return urlA;
}