首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google Apps脚本HTML表单不会为海外用户提交

Google Apps脚本HTML表单不会为海外用户提交
EN

Stack Overflow用户
提问于 2020-12-05 05:17:31
回答 1查看 66关注 0票数 1

我有一个提交用户数据的小工具条表单。它对美国的任何人都是有效的,但是如果来自海外的人试图提交表单,它就会失败。我甚至登录了与海外用户相同的用户帐户,表单就会为我提交。我从来没有遇到过这样的GAS问题。用户登录的帐户拥有脚本所在的电子表格,并且他尝试过本地和美国的IP地址来提交数据(甚至不确定这是否重要)。我需要在我的脚本中更改/包含哪些内容才能让所有用户都能够提交表单?创建一个Webapp和触发器会是一个解决方案吗?

Code.gs

代码语言:javascript
复制
//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}])
    
  }
  
}

Index.html

代码语言:javascript
复制
<!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>

Form.html

代码语言:javascript
复制
 <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>

JavaScript.html

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-10 00:34:08

看起来我只需要添加这个作为一个网络应用程序,并解决了这个问题。谢谢你的建议!

代码语言:javascript
复制
//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

代码语言:javascript
复制
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
  <center>
    <embed type="text/html" src="redacted"  width="290" height="800">
  </center>
  </body>
</html>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65150859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档