如何将接受/拒绝所有建议添加到Google Doc Add-On

时间:2017-08-29 16:20:43

标签: javascript google-apps-script google-docs

我正在创建包含各种菜单项的GSuite插件,并希望用户能够接受/拒绝当前Doc中的所有建议。

可以在此处找到执行此操作的客户端JavaScript代码:https://blog.crozdesk.com/accept-all-changes-in-google-docs-with-one-click/

我已尝试将此功能合并到我的附加组件中,其形式为带有两个按钮的提示。这是“应用程序脚本”代码:

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

这是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>

html在提示中正确显示,但是当我按下&#34;接受所有建议&#34;或&#34;拒绝所有建议&#34;按钮在浏览器中打开一个新选项卡,指向:https://[many-alphanumerics]-script.googleusercontent.com/userCodeAppPanel?,页面为空白。尽管&#34; google.script.host.close();&#34;但提示不会关闭。在两个职能范围内。

这可能还是我正在打一场失败的战斗?感谢任何指针。如果在没有提示的情况下(例如在Apps脚本功能本身内)更简单的方法,也很高兴听到有关此的建议。

非常感谢!

1 个答案:

答案 0 :(得分:1)

您是否尝试删除'form'元素?你不需要它,因为没有用户输入。因为您的按钮包含在&lt; form&gt;中标记,单击它们也会引发重定向到&lt; form&gt;中指定的URL的表单的“提交”事件。 'action'属性。通常将'action'属性设置为等于“”会重定向到页面本身,但这似乎不适用于GAS。

显然,GAS生成的表单具有默认的“action”属性,您无法像这样覆盖。

你也可以将每个按钮包装在自己的&lt; form&gt;中。标记然后在提交表单后阻止重定向

window.onload = function(){

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

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


});

}

在这种情况下,您不需要'onclick'处理程序来处理按钮。