рдПрдЪрдЯреАрдПрдордПрд▓ рд╕реЗрд╡рд╛: рд╕рд░реНрд╡рд░ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╕рдВрдкрд░реНрдХ рдХрд░рдирд╛

google.script.run рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб JavaScript API рд╣реИ. рдЗрд╕рдХреА рдорджрдж рд╕реЗ, рдПрдЪрдЯреАрдПрдордПрд▓ рд╕реЗрд╡рд╛ рд╡рд╛рд▓реЗ рдкреЗрдЬ, рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб Apps Script рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ. рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, google.script.run рдХреА рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рд╕реБрд╡рд┐рдзрд╛ рджрд┐рдЦрд╛рдИ рдЧрдИ рд╣реИ. рдЗрд╕рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб JavaScript рд╕реЗ, рд╕рд░реНрд╡рд░ рдкрд░ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ.

Code.gs

function doGet() {
  return HtmlService.createHtmlOutputFromFile('Index');
}

function doSomething() {
  Logger.log('I was called!');
}

Index.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script>
      google.script.run.doSomething();
    </script>
  </head>
</html>

рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рддреМрд░ рдкрд░ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рдпреВрдЖрд░рдПрд▓ рдкрд░ рдЬрд╛рдиреЗ рдкрд░, рдЖрдкрдХреЛ рдХреБрдЫ рдирд╣реАрдВ рджрд┐рдЦреЗрдЧрд╛. рд╣рд╛рд▓рд╛рдВрдХрд┐, рд▓реЙрдЧ рджреЗрдЦрдиреЗ рдкрд░ рдЖрдкрдХреЛ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рд╕рд░реНрд╡рд░ рдлрд╝рдВрдХреНрд╢рди doSomething() рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛.

рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдХреЙрд▓ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╣реЛрддреЗ рд╣реИрдВ: рдЬрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░, рд╕рд░реНрд╡рд░ рд╕реЗ рдлрд╝рдВрдХреНрд╢рди doSomething() рдЪрд▓рд╛рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рддреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЬрд╡рд╛рдм рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛, рдХреЛрдб рдХреА рдЕрдЧрд▓реА рд▓рд╛рдЗрди рдкрд░ рддреБрд░рдВрдд рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ. рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓, рдЖрдкрдХреА рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХреНрд░рдо рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ. рдЕрдЧрд░ рдПрдХ рд╣реА рд╕рдордп рдкрд░ рджреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдХрд┐ рдХреМрди рд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рдкрд╣рд▓реЗ рдЪрд▓реЗрдЧрд╛. рдкреЗрдЬ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдкрд░, рдирддреАрдЬреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ. рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕рдХреНрд╕реЗрд╕ рд╣реИрдВрдбрд▓рд░ рдФрд░ рдлрд╝реЗрд▓реНрдпреЛрд░ рд╣реИрдВрдбрд▓рд░ рдЖрдкрдХреЗ рдХреЛрдб рдХреЗ рдлрд╝реНрд▓реЛ рдХреЛ рдХрдВрдЯреНрд░реЛрд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ.

google.script.run рдПрдкреАрдЖрдИ, рд╕рд░реНрд╡рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рд╕рд╛рде 10 рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ. рдЕрдЧрд░ 10 рдХреЙрд▓ рдЕрдм рднреА рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдкрдиреЗ 11рд╡рд╛рдВ рдХреЙрд▓ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╕рд░реНрд╡рд░ рдлрд╝рдВрдХреНрд╢рди рддрдм рддрдХ рдбрд┐рд▓реЗ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЬрдм рддрдХ 10 рдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рдХреЙрд▓ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛. рдЖрдо рддреМрд░ рдкрд░, рдЖрдкрдХреЛ рдЗрд╕ рдкрд╛рдмрдВрджреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд╛рдпрдж рд╣реА рдХрднреА рд╕реЛрдЪрдирд╛ рдкрдбрд╝реЗ. рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЬрд╝реНрдпрд╛рджрд╛рддрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╣реА рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рд╕рд╛рде рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ 10 рд╕реЗ рдХрдо рдкрд░ рд╕реАрдорд┐рдд рдХрд░ рджреЗрддреЗ рд╣реИрдВ. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Firefox рдореЗрдВ рдпрд╣ рд╕реАрдорд╛ 6 рд╣реИ. рдЬрд╝реНрдпрд╛рджрд╛рддрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░, рд╕рд░реНрд╡рд░ рд╕реЗ рдХрд┐рдП рдЧрдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рддрдм рддрдХ рд░реЛрдХрддреЗ рд╣реИрдВ, рдЬрдм рддрдХ рдореМрдЬреВрджрд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛.

рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рджрд┐рдЦрд╛рдИ рдЧрдИ рд╡реИрд▓реНрдпреВ

рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕реА рддрд░рд╣, рд╕рд░реНрд╡рд░ рдлрд╝рдВрдХреНрд╢рди, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╡реИрд▓реНрдпреВ рджрд┐рдЦрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕рдХреЗ рд▓рд┐рдП, рд╕рдХреНрд╕реЗрд╕ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ.

рдХрд╛рдиреВрдиреА рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ, JavaScript рдкреНрд░рд┐рдорд┐рдЯрд┐рд╡ рд╣реЛрддреА рд╣реИрдВ. рдЬреИрд╕реЗ, Number, Boolean, String рдпрд╛ null. рд╕рд╛рде рд╣реА, рдпреЗ JavaScript рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рдРрд╕реЗ рдРрд░реЗ рднреА рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░рд┐рдорд┐рдЯрд┐рд╡, рдСрдмреНрдЬреЗрдХреНрдЯ, рдФрд░ рдРрд░реЗ рд╕реЗ рдмрдиреЗ рд╣реЛрддреЗ рд╣реИрдВ. рдкреЗрдЬ рдореЗрдВ рдореМрдЬреВрдж form рдПрд▓рд┐рдореЗрдВрдЯ рдХреЛ рднреА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рддреМрд░ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╕рд┐рд░реНрдлрд╝ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП. рд╕рд╛рде рд╣реА, рдЗрд╕реЗ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдХреЗ рддреМрд░ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛. рдЕрдЧрд░ form рдХреЗ рдЕрд▓рд╛рд╡рд╛, Date, Function, рдбреАрдУрдПрдо рдПрд▓рд┐рдореЗрдВрдЯ рдпрд╛ рдЕрдиреНрдп рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдЯрд╛рдЗрдк рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдЕрдиреБрд░реЛрдз рдкреВрд░реЗ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ. рдЗрд╕рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдпрд╛ рдРрд░реЗ рдореЗрдВ рдореМрдЬреВрдж рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдЯрд╛рдЗрдк рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ. рд╕рд░реНрдХреБрд▓рд░ рд░реЗрдлрд╝рд░рдВрд╕ рдмрдирд╛рдиреЗ рд╡рд╛рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рднреА рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ. рд╕рд╛рде рд╣реА, рдРрд░реЗ рдореЗрдВ рдореМрдЬреВрдж рдРрд╕реЗ рдлрд╝реАрд▓реНрдб рдЬрд┐рдирдХреА рд╡реИрд▓реНрдпреВ рддрдп рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИ рд╡реЗ null рдмрди рдЬрд╛рдПрдВрдЧреЗ.

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рд░реНрд╡рд░ рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ, рдУрд░рд┐рдЬрдирд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдХреЙрдкреА рдмрди рдЬрд╛рддрд╛ рд╣реИ. рдЕрдЧрд░ рдХреЛрдИ рд╕рд░реНрд╡рд░ рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрд╕рдХреА рдкреНрд░реЙрдкрд░реНрдЯреА рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдореМрдЬреВрдж рдкреНрд░реЙрдкрд░реНрдЯреА рдкрд░ рдЗрд╕рдХрд╛ рдЕрд╕рд░ рдирд╣реАрдВ рдкрдбрд╝рддрд╛.

рд╕рдХреНрд╕реЗрд╕ рд╣реИрдВрдбрд▓рд░

рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдХреЛрдб, рд╕рд░реНрд╡рд░ рдХреЙрд▓ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╝рд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдЧрд▓реА рд▓рд╛рдЗрди рдкрд░ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ. рдЗрд╕рд▓рд┐рдП, withSuccessHandler(function) рдХреА рдорджрдж рд╕реЗ, рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рддрдм рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рд╕рд░реНрд╡рд░ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ. рдЕрдЧрд░ рд╕рд░реНрд╡рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛрдИ рд╡реИрд▓реНрдпреВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдкреАрдЖрдИ рдЙрд╕ рд╡реИрд▓реНрдпреВ рдХреЛ рдирдП рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рддреМрд░ рдкрд░ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ.

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕рд░реНрд╡рд░ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдкрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рджрд┐рдЦрдиреЗ рд╡рд╛рд▓реА рд╕реВрдЪрдирд╛ рджрд┐рдЦрд╛рдИ рдЧрдИ рд╣реИ. рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдХреЛрдб рд╕реИрдВрдкрд▓ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рдЬрд╝рд░реВрд░реА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдлрд╝рдВрдХреНрд╢рди рдЖрдкрдХреЗ Gmail рдЦрд╛рддреЗ рдХреЛ рдРрдХреНрд╕реЗрд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ. рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкреЗрдЬ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдбрд┐рдЯрд░ рд╕реЗ getUnreadEmails() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рддрд░реАрдХреЗ рд╕реЗ рдПрдХ рдмрд╛рд░ рдЪрд▓рд╛рдПрдВ. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рддреЗ рд╕рдордп, рдЗрд╕реЗ тАЬрд╡реЗрдм рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдРрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛тАЭ рдХреЗ рддреМрд░ рдкрд░ рдЪрд▓рд╛рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдРрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛.

Code.gs

function doGet() {
  return HtmlService.createHtmlOutputFromFile('Index');
}

function getUnreadEmails() {
  return GmailApp.getInboxUnreadCount();
}

Index.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script>
      function onSuccess(numUnread) {
        var div = document.getElementById('output');
        div.innerHTML = 'You have ' + numUnread
            + ' unread messages in your Gmail inbox.';
      }

      google.script.run.withSuccessHandler(onSuccess)
          .getUnreadEmails();
    </script>
  </head>
  <body>
    <div id="output"></div>
  </body>
</html>

рдлрд╝реЗрд▓рд┐рдпрд░ рд╣реИрдВрдбрд▓рд░

рдЕрдЧрд░ рд╕рд░реНрд╡рд░ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдпрд╛ рдХреЛрдИ рдЧрдбрд╝рдмрдбрд╝реА рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рддреЛ withFailureHandler(function) рдЖрдкрдХреЛ рд╕рдлрд▓рддрд╛ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдмрдЬрд╛рдп рдЧрдбрд╝рдмрдбрд╝реА рд╣реИрдВрдбрд▓рд░ рддрдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ. рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реА, Error рдСрдмреНрдЬреЗрдХреНрдЯ (рдЕрдЧрд░ рдХреЛрдИ рд╣реИ) рдХреЛ рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯ рдХреЗ рддреМрд░ рдкрд░ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ.

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЕрдЧрд░ рдЖрдкрдиреЗ рдЧрдбрд╝рдмрдбрд╝реА рд╣реИрдВрдбрд▓рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдмрддрд╛рдпрд╛ рд╣реИ, рддреЛ рдЧрдбрд╝рдмрдбрд╝рд┐рдпреЛрдВ рдХреЛ JavaScript рдХрдВрд╕реЛрд▓ рдореЗрдВ рд▓реЙрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, withFailureHandler(null) рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ рдпрд╛ рдРрд╕рд╛ рдлрд╝реЗрд▓рд┐рдпрд░ рд╣реИрдВрдбрд▓рд░ рджреЗрдВ рдЬреЛ рдХреБрдЫ рди рдХрд░реЗ.

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдлрд╝реЗрд▓ рд╣реЛрдиреЗ рдкрд░ рд╣реИрдВрдбрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕, рдкрд╛рд╕ рд╣реЛрдиреЗ рдкрд░ рд╣реИрдВрдбрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ рдорд┐рд▓рддрд╛-рдЬреБрд▓рддрд╛ рд╣реЛрддрд╛ рд╣реИ.

Code.gs

function doGet() {
  return HtmlService.createHtmlOutputFromFile('Index');
}

function getUnreadEmails() {
  // 'got' instead of 'get' will throw an error.
  return GmailApp.gotInboxUnreadCount();
}

Index.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script>
      function onFailure(error) {
        var div = document.getElementById('output');
        div.innerHTML = "ERROR: " + error.message;
      }

      google.script.run.withFailureHandler(onFailure)
          .getUnreadEmails();
    </script>
  </head>
  <body>
    <div id="output"></div>
  </body>
</html>

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ

рд╕рд░реНрд╡рд░ рдХреЛ рдХрдИ рдмрд╛рд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдлрд▓рддрд╛ рдпрд╛ рдЧрдбрд╝рдмрдбрд╝реА рдХреЗ рдПрдХ рд╣реА рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдлрд┐рд░ рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕рдХреЗ рд▓рд┐рдП, withUserObject(object) рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ. рдЗрд╕рд╕реЗ рдПрдХ рдРрд╕рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗрдЧрд╛ рдЬрд┐рд╕реЗ рд╣реИрдВрдбрд▓рд░ рдХреЛ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рддреМрд░ рдкрд░ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛. рдЗрд╕ тАЬрдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯтАЭ рдХреЛ User рдХреНрд▓рд╛рд╕ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП. рдЗрд╕рдХреА рдорджрдж рд╕реЗ, рдЙрд╕ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдореЗрдВ рдЬрд╡рд╛рдм рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдиреЗ рд╕рд░реНрд╡рд░ рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд┐рдпрд╛ рдерд╛. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ. рдЗрд╕рд▓рд┐рдП, рдпреЗ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ. рдЬреИрд╕реЗ, рдлрд╝рдВрдХреНрд╢рди, рдбреАрдУрдПрдо рдПрд▓рд┐рдореЗрдВрдЯ рд╡рдЧреИрд░рд╣. рдЗрди рдкрд░ рд╕рд░реНрд╡рд░ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП, рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рд╕реЗ рдЬреБрдбрд╝реА рдкрд╛рдмрдВрджрд┐рдпрд╛рдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдРрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рдЬрд┐рдиреНрд╣реЗрдВ new рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реЛ.

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рд╕реЗ, рд╕рд░реНрд╡рд░ рд╕реЗ рдорд┐рд▓реА рд╡реИрд▓реНрдпреВ рдХреЗ рд╕рд╛рде рдмрдЯрди рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛. рд╣рд╛рд▓рд╛рдВрдХрд┐, рджреЛрдиреЛрдВ рдмрдЯрди рдПрдХ рд╣реА рд╕рдХреНрд╕реЗрд╕ рд╣реИрдВрдбрд▓рд░ рд╢реЗрдпрд░ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рджреВрд╕рд░рд╛ рдмрдЯрди рдкрд╣рд▓реЗ рдЬреИрд╕рд╛ рд╣реА рд░рд╣реЗрдЧрд╛. onclick рд╣реИрдВрдбрд▓рд░ рдХреЗ рдЕрдВрджрд░, this рдХреАрд╡рд░реНрдб button рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ.

Code.gs

function doGet() {
  return HtmlService.createHtmlOutputFromFile('Index');
}

function getEmail() {
  return Session.getActiveUser().getEmail();
}

Index.html

<!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)
          .getEmail()" />
    <input type="button" value="Not Clicked"
      onclick="google.script.run
          .withSuccessHandler(updateButton)
          .withUserObject(this)
          .getEmail()" />
  </body>
</html>

рдлрд╝реЙрд░реНрдо

рдЕрдЧрд░ рдХрд┐рд╕реА рд╕рд░реНрд╡рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ form рдПрд▓рд┐рдореЗрдВрдЯ рдХреЗ рд╕рд╛рде рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рддреМрд░ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдлрд╝реЙрд░реНрдо рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрди рдЬрд╛рддрд╛ рд╣реИ. рдЗрд╕рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЗ рдирд╛рдо, рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рддреМрд░ рдкрд░ рдФрд░ рдлрд╝реАрд▓реНрдб рдХреА рд╡реИрд▓реНрдпреВ, рд╡реИрд▓реНрдпреВ рдХреЗ рддреМрд░ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрддреА рд╣реИрдВ. рдлрд╝рд╛рдЗрд▓-рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдХреЗ рдХреЙрдиреНрдЯреЗрдВрдЯ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд╕рднреА рд╡реИрд▓реНрдпреВ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рдлрд╝рд╛рдЗрд▓-рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдХрд╛ рдХреЙрдиреНрдЯреЗрдВрдЯ, Blob рдСрдмреНрдЬреЗрдХреНрдЯ рдмрди рдЬрд╛рддрд╛ рд╣реИ.

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдлрд╝реЙрд░реНрдо рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рдЗрд╕рдореЗрдВ рдлрд╝рд╛рдЗрд▓-рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреЗрдЬ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛. рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдХреЛ Google Drive рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рддрд╛ рд╣реИ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдкреЗрдЬ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдпреВрдЖрд░рдПрд▓ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИ. onsubmit рд╣реИрдВрдбрд▓рд░ рдХреЗ рдЕрдВрджрд░, this рдХреАрд╡рд░реНрдб рдлрд╝реЙрд░реНрдо рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ. рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреЗрдЬ рдкрд░ рд╕рднреА рдлрд╝реЙрд░реНрдо рд▓реЛрдб рд╣реЛрдиреЗ рдкрд░, preventFormSubmit рдиреЗ рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдХреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИ. рдЗрд╕рд╕реЗ рдкреЗрдЬ рдХреЛ рдХрд┐рд╕реА рдЕрдкрд╡рд╛рдж рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЧрд▓рдд рдпреВрдЖрд░рдПрд▓ рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.

Code.gs

function doGet() {
  return HtmlService.createHtmlOutputFromFile('Index');
}

function processForm(formObject) {
  var formBlob = formObject.myFile;
  var driveFile = DriveApp.createFile(formBlob);
  return driveFile.getUrl();
}

Index.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <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.withSuccessHandler(updateUrl).processForm(formObject);
      }
      function updateUrl(url) {
        var div = document.getElementById('output');
        div.innerHTML = '<a href="' + url + '">Got it!</a>';
      }
    </script>
  </head>
  <body>
    <form id="myForm" onsubmit="handleFormSubmit(this)">
      <input name="myFile" type="file" />
      <input type="submit" value="Submit" />
    </form>
    <div id="output"></div>
 </body>
</html>

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░рдирд░

google.script.run рдХреЛ тАЬрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░рдирд░тАЭ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдбрд░ рдХреЗ рддреМрд░ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЕрдЧрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░рдирд░ рдореЗрдВ рд╕рдлрд▓рддрд╛ рд╣реИрдВрдбрд▓рд░, рдЧрдбрд╝рдмрдбрд╝реА рд╣реИрдВрдбрд▓рд░ рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореМрдЬреВрджрд╛ рд░рдирд░ рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реЛрддрд╛. рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ рдирдП рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд╛рд▓рд╛ рдПрдХ рдирдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░рдирд░ рдорд┐рд▓рддрд╛ рд╣реИ.

withSuccessHandler(), withFailureHandler(), рдФрд░ withUserObject() рдХреЛ рдХрд┐рд╕реА рднреА рдХреНрд░рдо рдореЗрдВ рдФрд░ рдХрд┐рд╕реА рднреА рдХреЙрдореНрдмрд┐рдиреЗрд╢рди рдХреЗ рд╕рд╛рде рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░рдирд░ рдкрд░, рд╡реИрд▓реНрдпреВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕рд╛ рд╕рд┐рд░реНрдлрд╝ рддрдм рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдм рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░рдирд░ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдХреЛрдИ рд╡реИрд▓реНрдпреВ рд╕реЗрдЯ рд╣реЛ. рдирдИ рд╡реИрд▓реНрдпреВ, рдкрд┐рдЫрд▓реА рд╡реИрд▓реНрдпреВ рдХреЛ рдмрджрд▓ рджреЗрддреА рд╣реИ.

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕рд░реНрд╡рд░ рд╕реЗ рдХрд┐рдП рдЧрдП рддреАрдиреЛрдВ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЧрдбрд╝рдмрдбрд╝реА рд╣реИрдВрдбрд▓рд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдлрд▓рддрд╛ рдХреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВрдбрд▓рд░ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ:

var myRunner = google.script.run.withFailureHandler(onFailure);
var myRunner1 = myRunner.withSuccessHandler(onSuccess);
var myRunner2 = myRunner.withSuccessHandler(onDifferentSuccess);

myRunner1.doSomething();
myRunner1.doSomethingElse();
myRunner2.doSomething();

рдирд┐рдЬреА рдлрд╝рдВрдХреНрд╢рди

рдЬрд┐рди рд╕рд░реНрд╡рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд╛рдо рдХреЗ рдЖрдЦрд┐рд░ рдореЗрдВ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рд╣реЛрддрд╛ рд╣реИ рдЙрдиреНрд╣реЗрдВ рдирд┐рдЬреА рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ. рдЗрди рдлрд╝рдВрдХреНрд╢рди рдХреЛ google.script рд╕реЗ рдХреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛. рд╕рд╛рде рд╣реА, рдЗрдирдХреЗ рдирд╛рдо рдХрднреА рднреА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдирд╣реАрдВ рднреЗрдЬреЗ рдЬрд╛рддреЗ. рдЗрд╕рд▓рд┐рдП, рдЗрдирдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдРрд╕реА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЧреЛрдкрдиреАрдп рд░рдЦрдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ. google.script рдХреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдореМрдЬреВрдж рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рднреА рдирд╣реАрдВ рджрд┐рдЦрддреЗ рдЬрд┐рдиреНрд╣реЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЯреЙрдк рд▓реЗрд╡рд▓ рдкрд░ рдирд╣реАрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ.

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди getBankBalance() рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ. рдЕрдЧрд░ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЖрдкрдХреЗ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдЗрд╕рдХрд╛ рдирд╛рдо рдкрддрд╛ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИ. рднрд▓реЗ рд╣реА, рдЖрдкрдиреЗ рдЗрд╕реЗ рдХреЙрд▓ рди рдХрд┐рдпрд╛ рд╣реЛ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ deepSecret_() рдФрд░ obj.objectMethod() рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рджрд┐рдЦрддреЗ.

Code.gs

function doGet() {
  return HtmlService.createHtmlOutputFromFile('Index');
}

function getBankBalance() {
  var email = Session.getActiveUser().getEmail()
  return deepSecret_(email);
}

function deepSecret_(email) {
 // Do some secret calculations
 return email + ' has $1,000,000 in the bank.';
}

var obj = {
  objectMethod: function() {
    // More secret calculations
  }
};

Index.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script>
      function onSuccess(balance) {
        var div = document.getElementById('output');
        div.innerHTML = balance;
      }

      google.script.run.withSuccessHandler(onSuccess)
          .getBankBalance();
    </script>
  </head>
  <body>
    <div id="output">No result yet...</div>
  </body>
</html>

Google Workspace рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдбрд╛рдпрд▓реЙрдЧ рдмреЙрдХреНрд╕ рдХрд╛ рд╕рд╛рдЗрдЬрд╝ рдмрджрд▓рдирд╛

Google Docs, Sheets рдпрд╛ Forms рдореЗрдВ рдХрд╕реНрдЯрдо рдбрд╛рдпрд▓реЙрдЧ рдмреЙрдХреНрд╕ рдХрд╛ рд╕рд╛рдЗрдЬрд╝ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕рдХреЗ рд▓рд┐рдП, рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдХреЛрдб рдореЗрдВ google.script.host, setWidth(width) рдпрд╛ setHeight(height) рддрд░реАрдХреЛрдВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ. (рдбрд╛рдпрд▓реЙрдЧ рдХрд╛ рд╢реБрд░реБрдЖрддреА рд╕рд╛рдЗрдЬрд╝ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, HtmlOutput рддрд░реАрдХреЛрдВ setWidth(width) рдФрд░ setHeight(height) рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ.) рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕рд╛рдЗрдЬрд╝ рдмрджрд▓рдиреЗ рдкрд░, рдбрд╛рдпрд▓реЙрдЧ рдкреИрд░рдВрдЯ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдмреАрдЪ рдореЗрдВ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВ. рд╕рд╛рде рд╣реА, рд╕рд╛рдЗрдбрдмрд╛рд░ рдХрд╛ рд╕рд╛рдЗрдЬрд╝ рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛.

Google Workspace рдореЗрдВ рдбрд╛рдпрд▓реЙрдЧ рдмреЙрдХреНрд╕ рдФрд░ рд╕рд╛рдЗрдбрдмрд╛рд░ рдмрдВрдж рдХрд░рдирд╛

рдЕрдЧрд░ Google Docs, Sheets рдпрд╛ Forms рдореЗрдВ рдбрд╛рдпрд▓реЙрдЧ рдмреЙрдХреНрд╕ рдпрд╛ рд╕рд╛рдЗрдбрдмрд╛рд░ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, HTML рд╕реЗрд╡рд╛ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ window.close() рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛. рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ google.script.host.close() рдкрд░ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Google Workspace рдХреЗ рдпреВрдЬрд╝рд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рддреМрд░ рдкрд░ рдПрдЪрдЯреАрдПрдордПрд▓ рджрд┐рдЦрд╛рдирд╛ рд╕реЗрдХреНрд╢рди рджреЗрдЦреЗрдВ.

Google Workspace рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдлрд╝реЛрдХрд╕ рдХреЛ рдореВрд╡ рдХрд░рдирд╛

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ, рдбрд╛рдпрд▓реЙрдЧ рдпрд╛ рд╕рд╛рдЗрдбрдмрд╛рд░ рд╕реЗ рдлрд╝реЛрдХрд╕ рдХреЛ рд╡рд╛рдкрд╕ Google Docs, Sheets рдпрд╛ Forms рдПрдбрд┐рдЯрд░ рдкрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, google.script.host.editor.focus() рддрд░реАрдХреЗ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ. рдпрд╣ рддрд░реАрдХрд╛, рдЦрд╛рд╕ рддреМрд░ рдкрд░ Document service рдХреЗ рддрд░реАрдХреЛрдВ Document.setCursor(position) рдФрд░ Document.setSelection(range) рдХреЗ рд╕рд╛рде рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдкрд░ рдЬрд╝реНрдпрд╛рджрд╛ рдлрд╝рд╛рдпрджреЗрдордВрдж рд╣реЛрддрд╛ рд╣реИ.