我使用的是GAS网络应用,当用户执行某些操作(例如点击特定的div)时,该应用需要刷新其内容。
在客户端,我有一个从onclick调用的脚本
google.script.run.withSuccessHandler(refreshCallback).myServersideFunction();
function refreshCallback(roomsPlus) {
var statusDiv = document.getElementById("status");
statusDiv.innerHTML = "Reloading...";
window.location.reload(true);
};
Run Code Online (Sandbox Code Playgroud)
状态div更改为“正在重新加载...”,因此我知道回调已被调用,但随后它从未重新加载页面。Caja或google apps脚本会禁用页面刷新吗?还有另一种刷新页面的方法吗?
还有一篇文章可能已经回答了我的问题.为了找到这个帖子,我需要搜索child nodes或者children.但问题是,我当时不知道子节点或HTML子节点是什么.
这不是一个jQuery问题.
我的问题是:如何确定HTML元素是空的还是不使用?例如:
<div id="UserRegistration"></div>
Run Code Online (Sandbox Code Playgroud)
以上<div>元素没有内容.与此相反:
<div id="UserRegistration">
<label>Password:</label>
<input type="password" id="password" placeholder="Your New Password" required maxlength="32"/>
<label>Verify Password:</label>
<input type="password" name="ReEnterPassword" id="reenterpassword" required maxlength="32"/><br/>
</div>
Run Code Online (Sandbox Code Playgroud)
我故意将元素留空,然后在用户单击菜单选项卡时将HTML注入其中.但是如果用户多次单击菜单项,我不想多次注入相同的HTML.为了避免这种情况,我希望代码确定元素是否已经注入了内容.我想使用Web API接口和JavaScript.使用添加内容.innerHTML
document.getElementById('UserRegistration').innerHTML=VariableWithRetreivedContent;
Run Code Online (Sandbox Code Playgroud)
当用户单击Register菜单选项卡时,将运行一个函数.我已经尝试使用它来确定是否已添加内容,但它不起作用:
function goToRegistration(ElmtToGoTo, FileToGet) {
//Use getElementById to get info from the ElmtToGoTo DIV
// and put info into the el variable
var el = document.getElementById(ElmtToGoTo);
alert(el.value);
// If element is already filled quit
if (el.value === undefined || el.value === …Run Code Online (Sandbox Code Playgroud) 我可以使用Google Apps脚本覆盖图像文件吗?我试过了:
file.setContent(newBlobImage);
file.replace(newBlobImage);
Run Code Online (Sandbox Code Playgroud)
这些都不奏效. .setContent()将删除文件中的任何数据,看起来它可能只是将变量名称写为文本,或类似的东西.我假定这两个.setContent()和.replace()是指文本文档,也许这就是为什么他们不工作.
如果它是文本文件或电子表格,我可以清除它,然后添加新内容.
我可以删除文件,然后创建一个新文件,但如果有其他方法,我宁愿不要.
如果我写一个具有相同名称的文件,它将不会覆盖现有文件,它会创建另一个具有相同名称的文件.
我能够删除文件的唯一方法是使用,DocsList并且我创建图像文件的唯一成功是DriveApp.所以我必须删除文件DocsList,然后创建另一个文件DriveApp.
好吧,我已经弄清楚如何删除文件而不将其发送到垃圾箱,所以我不需要在以后清理垃圾.Google Drive SDKApps脚本的内部有一个remove方法,它没有将文件发送到垃圾箱,它刚刚消失.
var myFolder = DriveApp.getFolderById('3Bg2dKau456ySkhNBWB98W5sSTM');
thisFile = myFolder.getFilesByName(myFileName);
while (thisFile.hasNext()) {
var eachFile = thisFile.next();
var idToDLET = eachFile.getId();
Logger.log('idToDLET: ' + idToDLET);
var rtrnFromDLET = Drive.Files.remove(idToDLET);
};
Run Code Online (Sandbox Code Playgroud)
所以,我正在组合DriveApp服务和DriveAPI删除文件而不将其发送到垃圾箱.在DriveAPI卸下摆臂需要的文件编号,但我没有文件ID,所以文件可以通过名字查找,然后将文件ID检索,然后ID用于删除该文件.所以,如果我找不到覆盖文件的方法,我至少可以删除旧文件,而不会丢弃它.
我刚才注意到,DriveAPI服务有一个Patch和Update选择.
.patch(resource, fileId, optionalArgs)
Run Code Online (Sandbox Code Playgroud)
Google文档修补程序 更新文件元数据.
该resourcearg是可能的元数据.这fileId …
我能够从已发布的应用程序脚本的 url 捕获变量,但我不确定如何将该变量传递给另一个函数。如果包含变量,下面的脚本将不会运行 onRun 函数。我的目标是传递 2 个变量,但一次传递一个问题。
function doGet(e) {
var id = e.parameter.id;
var minutes = e.parameter.min;
var html = '<p>'
+'<button onClick=google.script.run.onRun('+id+')>Run</button>' // Does not work when clicked
+'<button onClick=google.script.run.onRun()>Run without parameter</button>'
+'<button onClick=google.script.run.turnOn()>On</button>'
+'<button onClick=google.script.run.turnOff()>Off</button>'
+'</p>';
return HtmlService.createHtmlOutput(html).setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
function onRun(id){
Logger.log("id: "+id);
}
Run Code Online (Sandbox Code Playgroud) 我制作了一个小型的Web应用程序,当用户单击电子表格中的链接时,该应用程序会打开。该链接会将他们带到Web应用程序,从而对电子表格进行更改。我希望浏览器窗口在代码完成运行后自动关闭。
function doGet(e){
// code make changes to spreadsheet
// here I want browser window to close
return HtmlService.createHtmlOutput(uniqueid + " is marked complete");
};
Run Code Online (Sandbox Code Playgroud)
感谢帮助
我从使用 google.visualization 创建表格的 google 脚本中收到错误“未定义 google”。
你如何添加对谷歌脚本的引用,如果我让它在脚本中运行,我还必须将它添加到我的谷歌网站吗?我会把我的脚本放在下面。
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
function doGet() {
drawTable()
}
function drawTable() {
var data = new google.visualization.DataTable();
data.addColumn('string', 'Name');
data.addColumn('number', 'Salary');
data.addColumn('boolean', 'Full Time');
data.addRows(1);
data.setCell(0, 0, 'John');
data.setCell(0, 1, 10000, '$10,000');
data.setCell(0, 2, true);
var table = new google.visualization.Table(document.getElementById('table_div'));
table.draw(data, {showRowNumber: true});
google.visualization.events.addListener(table, 'select', function() {
var row = table.getSelection()[0].row;
alert('You selected ' + data.getValue(row, 0));
});
}
Run Code Online (Sandbox Code Playgroud) 总结:是否可以在 onOpen() 上请求授权?
详细版本:我有一个带有按钮的电子表格,可以分发给很多人。当按下任何按钮时,会调用一些需要权限的函数,因此 Google Apps 脚本会显示此弹出窗口:
这被接受后,一切运行良好,因为它现在有授权。但是,当打开工作簿时,我想在按下按钮之前运行需要权限的东西。但是,如果您将需要授权的代码放入 onEdit 或 onOpen 函数中,默认情况下它会在没有特权的情况下运行并中途崩溃,而不是显示弹出窗口并请求权限。
以下是一些示例代码 - 崩溃而不是请求创建触发器的权限(也适用于 CalendarApp 等):
function onOpen(e) {
Browser.msgBox("This is shown to the user");
try {
ScriptApp.newTrigger('someFunction').forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet()).onEdit().create();
}
catch (e) {
Browser.msgBox(e);
}
Browser.msgBox("This message is never shown to the user if there is no try catch because it crashes");
}
Run Code Online (Sandbox Code Playgroud) 通过 Apps 脚本提交表单时,如果表单设置为收集用户电子邮件以进行回复,则代码将失败并显示错误:
“抱歉,无法提交表单回复。请等待几分钟,然后重试。”
我认为谷歌可能已经改变了一些东西,因为去年运行的代码今年不起作用。
错误指向代码中的“提交”行。或者有时,代码运行,但仍然没有出现在工作表中,或者在表单本身的“响应”中。
如果我关闭收集电子邮件的选项,它运行良好,我会在 Google 表格中看到提交,只是没有电子邮件地址。
我设置了一个测试表单,将其附加到一个新的谷歌表以供回复,并粘贴到我的代码中:
function codeVoteDoVoteByForm()
{
// Get the Yes/No Google form
var myForm = FormApp.openById('File ID Here')
// Get a list of questions on it
var questions = myForm.getItems()
// Get question 0 (only one on this form) and mark it as multiple choice
var qt = questions[0].asMultipleChoiceItem()
// Set the users vote
var qr = qt.createResponse("I am here")
//Create the response
var FormResponse = myForm.createResponse()
var testemail = FormResponse.getRespondentEmail()
// Submit …Run Code Online (Sandbox Code Playgroud) 我的 Google Forms 插件附加了一个 Google Cloud Platform (GCP) 项目,并启用了各种 API。GCP API 和服务仪表板有一个流量和错误图表。流量图和错误图都显示一条线表示“计算”,“计算”错误率为 100%。但我不知道这是从哪里来的。附件是我的 GCP API 和服务页面的图像。它显示了我已启用的 API。我不记得为“计算”启用任何东西。并且没有任何关于“计算”的 API。任何信息,将不胜感激。
google-api google-compute-engine google-cloud-platform google-compute-api
我使用Resources->当前项目触发器来控制某些项目何时执行.例如,我的一些项目每天凌晨4点左右就会更新电子表格.现在当我单击Resources时,当前项目触发器选项消失了.发生了什么?这个更改是在最后一天左右进行的,因为上次我正在处理一个项目.现在它消失了.
javascript ×5
html ×2
dom ×1
form-submit ×1
google-api ×1
google-forms ×1
google-sites ×1
permissions ×1
reload ×1