Как запустить код сценария Google Sheets в веб-приложении сценария приложения Google? - PullRequest
0 голосов
/ 08 марта 2019

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

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

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

Я использую Google Apps Scripts Oauth и получаю токен Facebook. Это оригинальная работа, которая успешно генерирует токен и доступ к данным Facebook Оригинальная работа

Этокоды

     
     
     
     
     <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, но не в веб-приложении или любом html-браузере или на стороне клиента. Таккак отнести это к code.gs

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

Это code.gs PART

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 Ответ

0 голосов
/ 21 марта 2019

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...