2017-08-29 42 views
2

我使用各種菜單項創建GSuite插件,並希望用戶能夠接受/拒絕當前文檔中的所有建議。如何將接受/拒絕所有建議添加到Google文檔插件

的客戶端JavaScript代碼來做到這一點可以在這裏找到:https://blog.crozdesk.com/accept-all-changes-in-google-docs-with-one-click/

我試圖用兩個按鈕納入我的Add-On這在提示的形式。下面是Google Apps腳本代碼:

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中的提示正確地呈現,但是當我按下無論是「全部接受建議」或「拒絕所有建議」按鈕在瀏覽器中打開一個新選項卡,指向:空白頁面爲https://[many-alphanumerics]-script.googleusercontent.com/userCodeAppPanel?。提示不會關閉,儘管「google.script.host.close();」在兩個職能範圍內。

這是可能的還是我打敗了一場失敗的戰鬥?感謝任何指針。如果沒有提示(例如在Apps腳本功能本身內),有一種更簡單的方法可以做到這一點,也很樂意聽到有關這方面的建議。

非常感謝!

回答

1

您是否嘗試刪除'表單'元素?由於沒有用戶輸入,你並不需要它。由於您的按鈕被包裝在一個form>標籤中,因此點擊它們也會引發表單的'submit'事件,該事件被重定向到<表單中的'action'屬性中指定的URL。通常將'action'屬性設置爲「」將重定向到頁面本身,但這在GAS中似乎不起作用。

顯然,GAS生成的窗體具有默認的'action'屬性,您不能像這樣重寫。

你也可以換每個按鈕在自己的< form>標籤,然後阻止提交表單這樣

window.onload = function(){ 

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

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


}); 

} 

後重定向你不需要的「onClick」處理程序在這種情況下按鈕。

+0

謝謝安東。刪除表單元素會停止打開新選項卡,但現在,當我單擊按鈕時什麼都沒有發生 - 提示符甚至沒有關閉,這表明它甚至沒有達到「google.script.host.close()」。 」。 FWIW - 你的第二個建議恢復到原來的行爲(即打開新標籤,提示不關閉,沒有任何反應)。 – no1knows

相關問題