2016-02-19 77 views
0

我創建了一個側邊欄,以具有用於搜索我的Google工作表的基本UI。我正在關注this tutorial,以確保第一步工作正常,但不是這樣!我甚至拿出userObject部分來簡化它(老實說,因爲我不知道那部分是什麼)。HTMLService將不會顯示返回值

<!DOCTYPE html> 
<html> 
    <head> 
    <base target="_top"> 
    <script> 
     function updateButton(email, button) { 
     button.value = 'Clicked by ' + email; 
     } 
    </script> 
    </head> 
    <body> 
    <input type="button" value="Not Clicked" 
     onclick="google.script.run 
      .withSuccessHandler(updateButton) 
      //.withUserObject(this) 
      .testMe()" /> 
    <input type="button" value="Not Clicked" 
     onclick="google.script.run 
      .withSuccessHandler(updateButton) 
      //.withUserObject(this) 
      .testMe()" /> 
    </body> 
</html> 

它調用此函數:

function testMe() { 
    Logger.log("Test log."); 
    return ContentService.createTextOutput("Jackpot!"); 
} 

如果它的事項,在HTML通過的OnOpen運行在一個側邊欄,如下所示:

function showGradingSidebar() { 
    var html = HtmlService.createHtmlOutputFromFile('testSidebar') 
     .setSandboxMode(HtmlService.SandboxMode.IFRAME) 
     .setTitle('Testing Module') 
     .setWidth(300); 
    SpreadsheetApp.getUi() 
     .showSidebar(html); 
} 

當我按一下按鈕,它什麼都不做(我可以看到)。通過改變各個方面,我可以將它傳遞給Logger.log()一個簡單的消息,但即使我更改了HTML端,也無法可靠地工作。

我在閱讀有關安全限制的內容,這些限制需要清理函數返回的內容,但HtmlService.createHtmlOutput()和ContentService.createTextOutput()也都不成功。請指教。

更新:感謝@Bryan P,我得到它的工作。該TESTME()僅僅是:

return "Jackpot"; 

...和HTML頁面看起來像這樣:

[html, head, etc.]<body> 
    <input type="button" value="Ready" 
     onclick="google.script.run 
      .withSuccessHandler(updateButton) 
      .withUserObject(this) 
      .testMe()" ---> 
    <br><div id="output">Output goes here: </div> 
    <br><div id="papa">Papa goes here: </div> 
    <br><p></p> 
    <script> 
    function updateButton(result) { 
     var div = document.getElementById('output') 
     div.innerHTML = 'It finally works!' + result; 
    } 
    </script> 
</body> 
</html> 

我不知道有多少幫助,但我也向下移動腳本標籤在閱讀this SO post之後,到了身體的底部。

回答

0

在Chrome中,如果右鍵單擊邊欄區域>>檢查>>控制檯,它應該顯示一條消息,指出在單擊其中一個按鈕後沒有有效的返回類型。

.createTextOutput(content)返回一個TextOutput類型(這是不一樣只是簡單的文本類型相同)

當你已經部署了Web應用程序URL和一些外部的服務調用URL它僅使用。它也只得到handled with doGet()

您是否試過return "Jackpot";

.withUserObject(this) - this引用按鈕元素,整個方法將它傳遞給successHandler()。所以你可以考慮保留它。否則,你就必須從其他途徑successHandler內引用按鈕:

function updateButton(email) { 
    document.getElementById('myButton').value = 'Clicked by ' + email; 
} 

...這就需要你添加一個ID屬性到按鈕。

你總是可以做到:

function updateButton(email, button) { 
    console.log('Success hit'); 
    button.value = 'Clicked by ' + email; 
} 

...檢查successHandler是否甚至稱在Chrome瀏覽器開發控制檯了。

+0

感謝您的洞察力。我想我是在濫用內容服務。在我發現安全限制之前,我確實嘗試了簡單的「返回」累積獎金,因此我不知道什麼是「骯髒」的回報。 經過一個小時實施Bryan的輸入,我終於找到了工作。我更新了我原來的後代。 – Mithrandir