Javascript 谷歌应用程序脚本HTML表单赢得';t提交给海外用户
我有一个提交用户数据的小边栏表单。在美国,它对任何人都有效,但如果有海外人士试图提交表格,它就会失败。我甚至登录到与海外用户相同的用户帐户,并为我提交表单。我从来没有遇到过这样的气体问题。用户登录的帐户拥有脚本所在的电子表格,他已尝试使用本地和美国IP地址提交数据(不确定这是否重要)。我需要在脚本中更改/包括什么,以允许所有用户提交表单?创建一个Webapp和触发器会是一个解决方案吗 代码.gsJavascript 谷歌应用程序脚本HTML表单赢得';t提交给海外用户,javascript,html,forms,google-apps-script,google-sheets,Javascript,Html,Forms,Google Apps Script,Google Sheets,我有一个提交用户数据的小边栏表单。在美国,它对任何人都有效,但如果有海外人士试图提交表格,它就会失败。我甚至登录到与海外用户相同的用户帐户,并为我提交表单。我从来没有遇到过这样的气体问题。用户登录的帐户拥有脚本所在的电子表格,他已尝试使用本地和美国IP地址提交数据(不确定这是否重要)。我需要在脚本中更改/包括什么,以允许所有用户提交表单?创建一个Webapp和触发器会是一个解决方案吗 代码.gs //OPEN THE FORM IN SIDEBAR function showFormInSid
//OPEN THE FORM IN SIDEBAR
function showFormInSidebar() {
var form = HtmlService.createTemplateFromFile('Index').evaluate().setTitle('New Client');
SpreadsheetApp.getUi().showSidebar(form);
}
//PROCESS FORM DATA
function processForm(formObject){
var notes = [formObject.client,
formObject.website,
formObject.email,
formObject.plan];
var mTabs = [formObject.client,
formObject.plan,
formObject.timeAllowed,
'',
'',
'00:00:00.000'];
pushToSheets(notes,mTabs);
}
//INCLUDE HTML PARTS, EG. JAVASCRIPT, CSS, OTHER HTML FILES
function include(filename) {
return HtmlService.createHtmlOutputFromFile(filename).getContent();
}
//THIS FUNCTION IS USED TO PUSH DATA TO EACH RESPECTIVE SHEET FROM THE SIDEBAR FORM SUBMISSION
function pushToSheets(notes,mTabs) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var noteTab = ss.getSheetByName('NOTES');
var sheetArr = ['JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEPT','OCT','NOV','DEC'];
// var sheetArr = ['JAN','FEB'];
var nLast = noteTab.getLastRow();
noteTab.insertRowBefore(nLast+1);
noteTab.getRange(nLast+1, 1,1,4).setValues([notes]);
noteTab.getRange(2,1,nLast+1,17).sort([{column: 4, ascending: true}, {column: 1, ascending: true}])
for(var x = 0; x < sheetArr.length; x++) {
var sheet = ss.getSheetByName(sheetArr[x]);
var sLength = sheet.getLastRow();
sheet.insertRowBefore(sLength-1);
sheet.getRange(sLength-1, 1,1,6).setValues([mTabs]);
sheet.getRange(2, 1,sLength,11).sort([{column: 2, ascending: true}, {column: 1, ascending: true}])
}
}
//在侧栏中打开表单
函数showFormInSidebar(){
var form=HtmlService.createTemplateFromFile('Index').evaluate().setTitle('New Client');
SpreadsheetApp.getUi().showSidebar(表单);
}
//处理表单数据
函数processForm(formObject){
var notes=[formObject.client,
formObject.com,
formObject.email,
formObject.plan];
var mTabs=[formObject.client,
formObject.plan,
formObject.timeAllowed,
'',
'',
'00:00:00.000'];
pushToSheets(注释、MTAB);
}
//包括HTML部分,例如JAVASCRIPT、CSS和其他HTML文件
函数包括(文件名){
返回HtmlService.createHtmlOutFromFile(文件名).getContent();
}
//此功能用于将数据从侧栏表单提交推送到各个工作表
功能pushToSheets(注释、MTAB){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var noteTab=ss.getSheetByName('NOTES');
var sheetArr=[“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月];
//var sheetArr=['JAN','FEB'];
var nLast=noteTab.getLastRow();
noteTab.insertRowBefore(nLast+1);
getRange(nLast+1,1,1,4).setValues([notes]);
getRange(2,1,nLast+1,17).sort([{column:4,升序:true},{column:1,升序:true}]))
对于(变量x=0;x
Index.html
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
<?!= include('JavaScript'); ?> <!-- See JavaScript.html file -->
<title>Contact Details</title>
</head>
<body class="bg-secondary text-light">
<div class="container">
<?!= include('Form'); ?> <!-- See Form.html file -->
</div>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
<script>
$('#timeAllowed').keypress(function() {
var regex = new RegExp("^[0-9]");
var key = String.fromCharCode(event.charCode ? event.which : event.charCode);
if (!regex.test(key)) {
event.preventDefault();
return false;
}
if(this.value.length == 2){
this.value = this.value+':';
}
if(this.value.length == 5){
this.value = this.value+':00';
}
if(this.value.length > 7) {
return false;
}
});
</script>
</body>
</html>
联系方式
$('#timeAllowed')。按键(函数(){
var regex=new RegExp(“^[0-9]”);
var key=String.fromCharCode(event.charCode?event.which:event.charCode);
如果(!正则表达式测试(键)){
event.preventDefault();
返回false;
}
if(this.value.length==2){
this.value=this.value+':';
}
如果(this.value.length==5){
this.value=this.value+':00';
}
如果(this.value.length>7){
返回false;
}
});
Form.html
<form id="myForm" onsubmit="handleFormSubmit(this)" autocomplete="off">
<div class="form-group">
<label for="client">Client</label>
<input class="form-control form-control-sm" type="text" class="form-control" id="clint" name="client" placeholder="Client Name">
</div>
<div class="form-group">
<label for="gender">Plan</label>
<select class="form-control form-control-sm" id="plan" name="plan" required>
<option value="" selected disabled>Choose...</option>
<option value="00 hosting">00 hosting</option>
<option value="01 slim">01 slim</option>
<option value="02 basic">02 basic</option>
<option value="10 special">10 special</option>
<option value="99 coming up">99 coming up</option>
</select>
</div>
<div class="form-group">
<label for="last_name">Time Allowed</label>
<input class="form-control form-control-sm" type="text" class="form-control" pattern="[0-9][0-9]:[0-9][0-9]:[0-9][0-9]" title ="00:00:00" id="timeAllowed" name="timeAllowed" placeholder="00:00:00">
</div>
<div class="form-group">
<label for="email">Email</label>
<input class="form-control form-control-sm" type="email" class="form-control" id="email" name="email">
</div>
<div class="form-group">
<label for="website">Website</label>
<input class="form-control form-control-sm" type="text" class="form-control" id="website" name="website">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
客户
计划
选择。。。
00托管
01苗条
02基本
10特别
接下来是99
允许的时间
电子邮件
网站
提交
JavaScript.html
<script>
// Prevent forms from submitting.
function preventFormSubmit() {
var forms = document.querySelectorAll('form');
for (var i = 0; i < forms.length; i++) {
forms[i].addEventListener('submit', function(event) {
event.preventDefault();
});
}
}
window.addEventListener('load', preventFormSubmit);
function handleFormSubmit(formObject) {
google.script.run.processForm(formObject);
document.getElementById("myForm").reset();
}
</script>
//阻止表单提交。
函数preventFormSubmit(){
var forms=document.queryselectoral('form');
对于(var i=0;i
看起来我只需要将其添加为一个Webapp,就解决了这个问题。谢谢你的建议
//OPEN THE FORM IN SIDEBAR
function showFormInSidebar() {
var form = HtmlService.createTemplateFromFile('test').evaluate().setTitle('New Client');
SpreadsheetApp.getUi().showSidebar(form);
}
function doGet() {
var form = HtmlService.createTemplateFromFile('Index').evaluate().setTitle('New Client');
form.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
return form;
}
test.html
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<center>
<embed type="text/html" src="redacted" width="290" height="800">
</center>
</body>
</html>
看起来我只需要将其添加为一个Webapp,就解决了这个问题。谢谢你的建议
//OPEN THE FORM IN SIDEBAR
function showFormInSidebar() {
var form = HtmlService.createTemplateFromFile('test').evaluate().setTitle('New Client');
SpreadsheetApp.getUi().showSidebar(form);
}
function doGet() {
var form = HtmlService.createTemplateFromFile('Index').evaluate().setTitle('New Client');
form.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
return form;
}
test.html
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<center>
<embed type="text/html" src="redacted" width="290" height="800">
</center>
</body>
</html>
它是如何失败的?有错误信息吗?@James这很奇怪……在执行过程中,它说它失败了,但当我试图打开它查看详细信息时,它不会打开……是否有其他方法可以找到该数据?如果没有错误信息,就无法判断。。。web应用程序的执行设置是什么?它是如何失败的?有错误信息吗?@James这很奇怪……在执行过程中,它说它失败了,但当我试图打开它查看详细信息时,它不会打开……是否有其他方法可以找到该数据?如果没有错误信息,就无法判断。。。web应用程序的执行设置是什么?