Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从加载项轮询Google文档_Javascript_Jquery_Google Apps Script_Google Sheets_Google Docs - Fatal编程技术网

Javascript 如何从加载项轮询Google文档

Javascript 如何从加载项轮询Google文档,javascript,jquery,google-apps-script,google-sheets,google-docs,Javascript,Jquery,Google Apps Script,Google Sheets,Google Docs,文档和工作表加载项的一个缺点是,应用程序脚本无法告诉用户在加载项之外做什么。这个诱人的提示是: 可以从数据库中轮询文件内容的更改 侧边栏的客户端代码,尽管您总是会有一些 延迟该技术还可以提醒您的脚本注意 用户选择的单元格(在图纸中)和光标或选择(在文档中) 遗憾的是,这在任何演示代码中都没有显示。如何操作?轮询是从附加组件用户界面中的html代码完成的,使用google.Script.run调用服务器端应用程序脚本函数 使用jQuery简化了这一过程,我们甚至可以从下面的答案开始 函数doPol

文档和工作表加载项的一个缺点是,应用程序脚本无法告诉用户在加载项之外做什么。这个诱人的提示是:

可以从数据库中轮询文件内容的更改 侧边栏的客户端代码,尽管您总是会有一些 延迟该技术还可以提醒您的脚本注意 用户选择的单元格(在图纸中)和光标或选择(在文档中)


遗憾的是,这在任何演示代码中都没有显示。如何操作?

轮询是从附加组件用户界面中的html代码完成的,使用
google.Script.run调用服务器端应用程序脚本函数

使用jQuery简化了这一过程,我们甚至可以从下面的答案开始

函数doPoll(){
$.post('ajax/test.html',函数(数据){
警报(数据);//在此处处理结果
设置超时(doPoll,5000);
});
}
如果我们用GAS等价物替换ajax调用,基本思想可以用于googleapps脚本

以下是您将在html文件中使用的轮询函数的框架:

/**
*加载文档时,将单击处理程序分配给按钮“添加”
*应开始隐藏的元素(避免“闪烁”),以及
*开始轮询文档更新。
*/
$(函数(){
//分配单击处理程序
//添加应该开始隐藏的元素
//开始轮询更新
poll();
});
/**
*在给定的时间间隔轮询服务器端函数“serverFunction”
*并使用结果更新DOM元素。
*
*@param{Number}轮询之间的间隔(可选)时间(毫秒)。
*默认值为2秒(2000毫秒)
*/
函数轮询(间隔){
间隔=间隔| | 2000;
setTimeout(函数(){
google.script.run
.withSuccessHandler(
职能(结果){
$(“#某些元素”)。使用(结果)更新;
//以递归方式设置下一次轮询
投票(间隔);
})
.withFailureHandler(
函数(消息,元素){
淋浴器(味精,$(“#按钮栏”);
element.disabled=false;
})
.serverFunction();
},间隔);
};
附加示例,文档轮询器 这是jQuery轮询技术的一个演示,它调用服务器端googleapps脚本函数来检测Google文档中的用户行为。它没有做任何有用的事情,但它展示了一些通常需要了解用户活动和文档状态的事情,例如对按钮的上下文感知控制

同样的原理也适用于电子表格或独立的GAS Web应用程序

与中的UI应用程序示例一样,此技术可用于绕过执行时间限制,至少对于具有用户界面的操作

该代码构建在Google的示例插件的基础上。按照该指南中的说明,使用下面的代码而不是快速入门中的代码

代码.gs
/**
*打开文档时,在Google文档UI中创建菜单项。
*
*@param{object}是简单onOpen触发器的事件参数。到
*确定触发器使用的授权模式(ScriptApp.AuthMode)
*在运行中,检查e.authMode。
*/
功能开启(e){
DocumentApp.getUi().createAddonMenu()文件
.addItem('Start','showSidebar')
.addToUi();
}
/**
*安装加载项时运行。
*
*@param{object}是简单onInstall触发器的事件参数。到
*确定触发器使用的授权模式(ScriptApp.AuthMode)
*在运行中,检查e.authMode。(实际上,onInstall触发器总是
*在AuthMode.FULL中运行,但onOpen触发器可能是AuthMode.LIMITED或
*AuthMode.NONE。)
*/
函数onInstall(e){
onOpen(e);
}
/**
*在包含加载项用户界面的文档中打开侧栏。
*/
函数showSidebar(){
var ui=HtmlService.createHtmlOutputFromFile('Sidebar')
.setTitle(“文档轮询器”);
DocumentApp.getUi().showSidebar(ui);
}
/**
*检查是否存在当前文本选择。
*
*@return{boolean}“true”(如果选择了任何文档文本)
*/
函数checkSelection(){
返回{isSelection:!!(DocumentApp.getActiveDocument().getSelection()),
cursorWord:getCursorWord()};
}
/**
*获取用户选择的文本。如果没有选择,
*此函数显示一条错误消息。
*
*@return{Array.}返回所选文本。
*/
函数getSelectedText(){
var selection=DocumentApp.getActiveDocument().getSelection();
如果(选择){
var text=[];
var elements=selection.getSelectedElements();
对于(var i=0;i