クライアントサイドの処理では、変数に値を割り当てて、関数のステータスを識別できます。
index.htmlを
<!DOCTYPE html>
<html>
<body>
<img src="http://cdn.soulsplay.com/assets//listing/css/comments/submit-button-2.png" onclick="invokeSubmit();">
</body>
<script>
var image_clicked = 0;
function invokeSubmit(){
image_clicked ++;
if(image_clicked == 1){
alert("Processing");
google.script.run.withSuccessHandler(function(){
image_clicked = 0;
alert("done");
}).sleep_func();
}
}
</script>
</html>
code.gs
function doGet() {
var output = HtmlService.createTemplateFromFile('index').evaluate();
output.setSandboxMode(HtmlService.SandboxMode.IFRAME);
output.setTitle('App Script');
return output;
}
function sleep_func(){
Utilities.sleep(15000);
return;
}
またLock Serviceを使用して同時アクセスからスクリプトを防ぐことができます。
function test_func(){
var lock = LockService.getScriptLock();
lock.waitLock(15000);
//Some operations
lock.releaseLock();
}
ダイアログまたはサイドバーでボタンを使用する場合は、JavaScriptが無効になり、スクリプトが完了した後でコールバック関数で再度有効にすることができます。 [成功ハンドラー](https://developers.google.com/apps-script/guides/html/communication)を確認してください。私はあなたがスプレッドシート自体のボタンとして使用されるイメージでこれを行うことができるとは思わない。 – Cooper