我正在创建包含各种菜单项的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脚本功能本身内)更简单的方法,也很高兴听到有关此的建议。
非常感谢!
答案 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'处理程序来处理按钮。