Javascript 谷歌应用程序脚本HTML表单赢得';t提交给海外用户

Javascript 谷歌应用程序脚本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

我有一个提交用户数据的小边栏表单。在美国,它对任何人都有效,但如果有海外人士试图提交表格,它就会失败。我甚至登录到与海外用户相同的用户帐户,并为我提交表单。我从来没有遇到过这样的气体问题。用户登录的帐户拥有脚本所在的电子表格,他已尝试使用本地和美国IP地址提交数据(不确定这是否重要)。我需要在脚本中更改/包括什么,以允许所有用户提交表单?创建一个Webapp和触发器会是一个解决方案吗

代码.gs

//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应用程序的执行设置是什么?