2017-08-31 60 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