2017-08-31 101 views
0

我创建了一个简单的网络应用程序,但它不工作。Google Apps脚本 - Javascript无法正常工作

Code.gs:

function doGet() {//I think this works 
    var output = HtmlService.createTemplateFromFile('index').evaluate(); 
    output.setSandboxMode(HtmlService.SandboxMode.IFRAME); 
    output.setTitle('email button'); 
    return output; 
} 

function getContent(filename) {//might work 
    Logger.log('getContent()'); 
    return HtmlService.createTemplateFromFile('javascriptCode').getRawContent(); 
} 

的index.html:

<!DOCTYPE html> 
<html> 
    <body> 
    <form id="email_subscribe"> 
     <input type="email" name="email" id="email" placeholder="Enter your email"> 
     <input type="button" id="submitButton" value="Submit"> 
    </form> 

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" /> 
    <?!= getContent("javascript") ?> 

    </body> 
</html> 

javascriptCode.html:

<script type="text/javascript"> 
    $(document).ready(function() { 
    $("#submitButton").onclick(function() { 
     alert('thx for submitting'); 
    }); 
    }); 
</script> 

当运行Web应用程序这样,电子邮件和按钮字段正确加载,并且记录器记录'getContent()'。但是,当我点击按钮时没有任何反应。我究竟做错了什么?

谢谢

+0

在您的index.html,当你调用你的getContent在JavaScript中传递,而不是javascriptCode。 –

回答

0

你的代码中的错误很少。

  1. 脚本标签是不是自闭的标签。
  2. 服务https版本的jquery比较安全,某些时候http内容 会被阻塞。
  3. 还有NO onclick事件在jquery它只是点击

code.gs

function doGet() { 
    var output = HtmlService.createTemplateFromFile('index').evaluate(); 
    output.setSandboxMode(HtmlService.SandboxMode.IFRAME); 
    output.setTitle('email button'); 
    return output; 
} 

function getContent(filename) { 
    return HtmlService.createHtmlOutputFromFile(filename).getContent(); 
} 

的index.html

<!DOCTYPE html> 
<html> 
    <body> 
    <form id="email_subscribe"> 
     <input type="email" name="email" id="email" placeholder="Enter your email"> 
     <input type="button" id="submitButton" value="Submit"> 
    </form> 

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
    <?!= getContent("javascriptCode") ?> 

    </body> 
</html> 

javascriptCode.html

<script type="text/javascript"> 
    $(document).ready(function() { 
    $("#submitButton").click(function() { 
     alert('thx for submitting'); 
    }); 
    }); 
</script> 
0

一个简单的HTML对话框的例子

我通常测试这些东西作为一个对话框,让他们的工作。它是一个对话框,我也包含了doGet。我希望这有帮助。我没有完全按照你的想法去做,但我认为这会帮助你这样做。

Code.gs:

function doGet() 
{ 
    var output = HtmlService.createTemplateFromFile('webappdoesnotwork'); 
    return output.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL) 
} 

function getEmail(email) 
{ 
    Logger.log(email); 
    return true; 
} 

function showDialog() 
{ 
    var output = HtmlService.createHtmlOutputFromFile('webappdoesnotwork'); 
    SpreadsheetApp.getUi().showModelessDialog(output, 'My WebApp'); 
} 

webappdoesnotwork.html

<!DOCTYPE html> 
    <html> 
     <head> 
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
     <script> 
     function getEmail() 
     { 
     var email=$('#email').val(); 
     google.script.run 
      .withSuccessHandler(sayThanks) 
      .getEmail(email); 
     } 
     function sayThanks() 
     { 
     $('#saythanks').css('display','block'); 
     $('#controls').css('display','none'); 
     } 
     console.log('My Code'); 
    </script> 
     </head> 
     <body> 
     <div id="saythanks" style="display:none">Hey Thanks for Responding</div> 
     <div id="controls"> 
      <input type="text" id="email" size="35" placeholder="Enter your email"/> 
      <input type="button" id="submitButton" value="Submit" onClick="getEmail();"/> 
     </div> 
     </body> 
    </html> 
+0

感谢您的输入。谷歌应用程序脚本中是否允许内嵌JavaScript? –

+0

是的。该对话框可以看起来非常像任何其他HTML文件,但与标准JavaScript或甚至JQuery相比,异步回调处理程序非常简单。顺便说一句,你仍然可以使用html输入标签的onClick属性。分配点击功能时要小心。如果在对话框运行时尝试更改它们,请务必解除未使用的点击分配。 – Cooper