我正试图在谷歌网站(一个新的谷歌网站,而不是"经典谷歌网站")中"安装"一个谷歌脚本作为菜单项。
这个脚本应该为嵌入在网站中的电子表格添加一行新行。该电子表格(名为"Catalog")是一个谷歌工作表,脚本(我想从谷歌网站运行)已经作为绑定脚本安装在工作表中,当从S切换时可以工作纸张。
脚本基本上在我的歌曲目录底部添加了一行新行,以创建一行新行来添加一首新歌。
在电子表格中工作的脚本是:
function addSong() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getActiveSheet();
var numRows = sheet.getLastRow()
sheet.appendRow([numRows+1]);
}
我的问题是我不知道如何从网站访问脚本。也就是说,我不知道如何引用网站菜单中的脚本(通过URL或什么?)让它运行。
我设想它的工作方式是,我在网站的"目录"菜单下有一个名为"添加歌曲"的子页面,当我切换它时,我希望脚本运行并在目录表中添加一行。
有什么帮助吗?
更新了一个更干净的示例:
首先,从其他地方访问GAS脚本的最佳方式可能是将其发布为Web应用程序。这样,脚本就可以通过其发布的URL进行调用。Web应用程序的主要要求是它有一个doGet()函数作为入口点。
我敢肯定,你只能将一个新的谷歌网站菜单项与同一网站内的另一个页面相关联。因此,您不能直接从菜单中调用WebApp(通过其URL)。但在新的网站页面上,菜单项会带你去,你可以:
- 将"站点"按钮与Web应用程序URL关联(如果有帮助的话),或者
- 在加载页面时调用的页面中嵌入一些带有JavaScript的HTML代码;有点复杂,但这确实意味着对Web应用程序的调用将是自动化的
下面的代码是一个简单的web应用程序,它是工作表中的绑定函数。如果您发布此(发布>>部署为WebApp…),然后获取url,则可以将其与页面中的按钮或调用关联。
function doGet(request){
addSong(request.parameter.song); // Call your own function.
var response = {status: "SUCCESS", data: request.parameter.song};
// Return the response.
return ContentService.createTextOutput(JSON.stringify(response)).setMimeType(ContentService.MimeType.JSON);
}
function addSong(song) {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getActiveSheet();
var numRows = sheet.getLastRow()
sheet.appendRow([numRows+1,song]);
}
要使用按钮,请添加以下内容作为按钮的链接:
https://script.google.com/macros/s/<your web app ref>/exec?song=%22Bohemian%20Rhapsody%22
下面的代码是通过菜单访问的站点网页中嵌入的HTML自动调用WebApp的示例。从JavaScript调用Web应用程序还有其他方法,但XMLHttpRequest()适用于大多数浏览器。
<!DOCTYPE html>
<html>
<body onload="test('https://script.google.com/macros/s/<your web app ref>/exec?song=StairwaytoHeaven') ;">
<p id="message">? </p>
<script>
function test(url) {
var XHR = new XMLHttpRequest();
XHR.onreadystatechange = function() {
if(XHR.readyState == 4) {
if(XHR.status == 200) {
console.log("SUCCESS: status = "+XHR.status);
document.getElementById("message").innerHTML = XHR.responseText;
console.log(XHR.responseText);
} else {
console.log("FAILURE: status = "+XHR.readystate+" "+XHR.status);
document.getElementById("message").innerHTML = "Failure";
}
}
}
XHR.open("GET", url + ((/?/).test(url) ? "&" : "?") + Date.now()); // Add timestamp to disable caching, if required.
XHR.send();
return;
}
</script>
</body>
</html>