2017-08-29 5 views
2

Je crée un complément GSuite avec divers éléments de menu et je souhaite que les utilisateurs puissent accepter/rejeter toutes les suggestions de leur document actuel.Comment ajouter/rejeter toutes les suggestions à un module complémentaire Google Docs

Le code javascript côté client pour ce faire se trouve ici: https://blog.crozdesk.com/accept-all-changes-in-google-docs-with-one-click/

J'ai essayé d'intégrer dans mon Add-On sous la forme d'une invite avec deux boutons. Voici Apps Script code:

function suggestions() { 
    var suggestions = [HTML as per below] 
    var htmlOutput = HtmlService.createHtmlOutput(suggestions) 
    .setWidth(300) 
    .setHeight(100); 
    ui.showModalDialog(htmlOutput, 'Accept/Reject All Suggestions'); 
} 

Voici le code html:

 <!DOCTYPE html> 
     <html> 
      <head> 
      <base target="_top"> 
      <link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css"> 
      </head> 
     <body> 
     <form> 
     <div class="block" id="button-bar"> 
      <button class="blue" id="accept-all">Accept All Suggestions</button> 
     </div> 
     <div class="block" id="button-bar"> 
      <button class="blue" id="reject-all">Reject All Suggestions</button> 
     </div> 
     </form> 
     <script> 
     document.getElementById("accept-all").onclick = accept-all(); 
     document.getElementById("reject-all").onclick = reject-all(); 
     function accept-all() { 
     google.script.host.close(); 
     //below code from https://blog.crozdesk.com/accept-all-changes-in-google-docs-with-one-click/ 
     var d=document.getElementsByClassName("docos-accept-suggestion"); 
     d = Array.prototype.slice.call(d); 
     d.forEach(function(n){ 
      var e = document.createEvent("MouseEvents"); 
      e.initEvent("click", true, false); 
      n.dispatchEvent(e,true); 
      e = document.createEvent("MouseEvents"); 
      e.initEvent("mousedown", true, false); 
      n.dispatchEvent(e,true); 
      e = document.createEvent("MouseEvents"); 
      e.initEvent("mouseup", true, false); 
      n.dispatchEvent(e,true); 
     }); 
     } 
     function reject-all() { 
     google.script.host.close(); 
     //below code from https://blog.crozdesk.com/accept-all-changes-in-google-docs-with-one-click/   
     var d=document.getElementsByClassName("docos-reject-suggestion"); 
     d = Array.prototype.slice.call(d); 
     d.forEach(function(n){ 
      var e = document.createEvent("MouseEvents"); 
      e.initEvent("click", true, false); 
      n.dispatchEvent(e,true); 
      e = document.createEvent("MouseEvents"); 
      e.initEvent("mousedown", true, false); 
      n.dispatchEvent(e,true); 
      e = document.createEvent("MouseEvents"); 
      e.initEvent("mouseup", true, false); 
      n.dispatchEvent(e,true); 
     }); 
     } 
     </script> 
     </body> 
     </html> 

Le html est présenté correctement dans l'invite, mais quand je presse soit la « Accepter toutes les suggestions » ou « Rejeter toutes les suggestions » boutons un nouvel onglet est ouvert dans le navigateur pointant vers: https://[many-alphanumerics]-script.googleusercontent.com/userCodeAppPanel? avec une page blanche. L'invite ne se ferme pas, malgré "google.script.host.close();" étant dans les deux fonctions. Est-ce possible ou suis-je en train de livrer une bataille perdue? Reconnaissant pour tous les pointeurs. S'il existe une façon plus simple de le faire sans l'invite (par exemple, dans la fonction Apps Script), vous êtes également heureux d'entendre des suggestions à ce sujet.

Merci beaucoup!

Répondre

1

Avez-vous essayé de supprimer l'élément 'form'? Vous n'en avez pas vraiment besoin car il n'y a pas d'entrée utilisateur. Parce que vos boutons sont enveloppés dans une balise> form <, en cliquant sur eux soulève également l'événement 'submit' du formulaire qui redirige vers l'URL spécifiée dans l'attribut <> action 'action'. Habituellement, définir l'attribut 'action' sur "" redirigera vers la page elle-même, mais cela ne semble pas fonctionner dans GAS.

Apparemment, les formulaires générés par GAS ont un attribut 'action' par défaut que vous ne pouvez pas remplacer de la sorte.

Vous pouvez également envelopper chaque bouton dans sa propre < form> et empêcher rediriger après avoir soumis le formulaire comme celui-ci

window.onload = function(){ 

var form = document.getElementById('form1'); 
form1.addEventListener('submit', function(event){ 

    event.preventDefault(); 
    //call the function for this form 


}); 

} 

Vous ne aurez pas besoin des gestionnaires « onclick » pour les boutons dans ce cas.

+0

Merci Anton. Retrait de l'élément de formulaire a arrêté le nouvel onglet en cours d'ouverture, mais maintenant, quand je clique sur les boutons rien ne se passe - l'invite ne ferme même pas, ce qui suggère qu'il ne va même pas jusqu'à "google.script.host.close(); ". FWIW - votre seconde suggestion revient au comportement original (c'est-à-dire ouvre un nouvel onglet, l'invite ne se ferme pas, rien ne se passe). – no1knows