Как я могу запустить код скрипта Google Sheets в веб-приложении Google App Script?

#javascript #facebook-graph-api #google-apps-script #google-sheets

#javascript #facebook-graph-api #google-apps-script #google-sheets

Вопрос:

У меня есть код Google Sheet, который содержит часть пользовательского интерфейса, т.е. html и code.gs проблема в том, что внутри Google sheet я получаю веб-страницу, аутентификация и другие функции работают хорошо, но если я добавлю doGet () в code.gs и преобразовать это в webapp, функции не работают, скриплеты отображаются на html-странице, также функции не работают.

Поскольку код внутри html-страницы выполняется на стороне сервера таблицы сценариев Google App, но он не запускается на стороне клиента, поскольку ссылка не направляется на сторону сервера code.gs

Мне нужно заставить его работать с кодом на стороне клиента, он должен функционировать так же, как он работает внутри электронной таблицы Google

Я использую Oauth Google Apps Scripts и получаю токен facebook это оригинальная работа, которая успешно генерирует токен и обеспечивает доступ к facebook data Оригинальная работа

Это коды

      
     
     
     
     <div class="tab-content">
        
        <!-- Home -->
        <div id="ads" class="tab-pane fade in active">
        <div id="page-content-wrapper">
            <div class="hamburger is-closed" data-toggle="offcanvas">
                <span class="hamb-top"></span>
    			<span class="hamb-middle"></span>
				<span class="hamb-bottom"></span>
            </div>
            <div class="container">
            
            
           <? if(!getService().hasAccess()) { ?> 
                <div class="row">
                    <div class="col-md-12 col-lg-12">
                    <p style="font-size:25px;">Features:</p>
                   
                    </div>
                </div>
                <br />
     <div class="row">
    <div class="col-md-12" align='center'>
    <a class="loginBtn loginBtn--facebook btn btn-info" href='<?=getService().getAuthorizationUrl()?>' target='_blank'>Authorize Facebook</a>
    </div>
    </div>
    
    <? } else { ?>
    
    <p style='color:green'>Authorization Success</p>
    
<div class="form-group">
<label for="accountData">Select Account:</label><span class="glyphicon glyphicon-question-sign help"  title="Select Account To Export"></span>
<select id="accountData" style="width: 100%">
 <? if (getService().hasAccess()) { ?>
 <? var data = adAccounts() ?>
 <? if (data != false) { ?>
<? data = data['facebookAccountData'] ?>
<optgroup label="Ad Accounts">
<? for (i=0; i<data.length; i  ) { ?>
    <option value="<?= data[i]['account_id'] ?>" data-type="facebookAds"><?= data[i]['name'] ?> (<?= data[i]['account_id'] ?>)</option>
   <? } ?>
</optgroup>
 
 <? } ?>
 
   <? } ?>
   
   </select>
</div>      

сама кнопка входа в систему вызывает функцию внутри code.gs но это работает только внутри Google Sheet, но не в веб-приложении или любом HTML-браузере или на стороне клиента
Итак, как передать это в code.gs

  href='<?=getService().getAuthorizationUrl()
  

Это code.gs ЧАСТЬ

 function fbAuth(){
  var UI=HtmlService.createTemplate("<b><a href='<?=getService().getAuthorizationUrl()?>' target='_blank'>Click To Authorize</a></b><br /><? if(getService().hasAccess())"  
                                    "{ ?> <?!= <p><span style='color:green'>Authorized Successfully</span></p> } else {?> <?!= <p><span style='color:red'>Not Authorized</span></p> }").evaluate() 
  SpreadsheetApp.getUi().showModalDialog(UI, "Facebook Authorization")
 
}







function getService() {
  return OAuth2.createService('Facebook')
      // Set the endpoint URLs.
      .setAuthorizationBaseUrl('https://www.facebook.com/dialog/oauth')
      .setTokenUrl('https://graph.facebook.com/v3.2/oauth/access_token')

      // Set the client ID and secret.
      .setClientId(CLIENT_ID)
      .setClientSecret(CLIENT_SECRET)

      // Set the name of the callback function that should be invoked to complete
      // the OAuth flow.
      .setCallbackFunction('authCallback')
  
  
      //Set Scope
      .setScope('ads_read manage_pages publish_pages pages_show_list')
      
  

      // Set the property store where authorized tokens should be persisted.
      .setPropertyStore(PropertiesService.getUserProperties());
}


function authCallback(request) {
  var isAuthorized = getService().handleCallback(request);
 
  if (isAuthorized) {
    successUI(true)
    showBar()
    return HtmlService.createHtmlOutput('Success! You can close this tab.<script>window.top.close()</script>');
  } else {
    successUI(false)
    showBar()
    return HtmlService.createHtmlOutput('Denied. You can close this tab.<script>window.top.close()</script>');
  }
}


function reset() {
  var service = getService();
  service.reset();
  showBar()
  SpreadsheetApp.getUi().alert("Token Reset Success!!")
}

function successUI(isAuth){

 if(isAuth){
  var UI=HtmlService.createTemplate("<b><span style='color:green'>Authorization Successful</span></b>").evaluate()
  SpreadsheetApp.getUi().showModalDialog(UI, "Authorization Status") } else
  {var UI=HtmlService.createTemplate("<b><span style='color:red'>Authorization Fail</span></b>").evaluate()
    SpreadsheetApp.getUi().showModalDialog(UI, "Authorization Status")}
}  

Ответ №1:

Наконец-то найдено решение, необходимо добавить html-теги и body-теги в HTML-файл, а в gs-файл мы должны добавить

 function doGet(){
 return HtmlService.createTemplateFromFile('html').evaluate()
  
}  

затем он должен возвращать HTML-страницу без скобок