我正在尝试在用户键入时修改Google文档的某些部分。
具体来说,我想添加一个功能来缩进多行文本。意思是当用户选择多行文本,然后单击“ tab”键时,它应该缩进所有这些行
为此,我认为除了使用以下方法读取选择内容外,我还必须获取用户键入的当前keyCode:
var doc = DocumentApp.getActiveDocument().getCursor();
var els = doc.getElement(),
txt = els.asText().getText()
我已经在工作了。但是问题是:
在我的客户端,当我这样做时:
window.addEventListener("keyup", function(e) {
console.log(e.keyCode);
})
仅在用户选择侧边栏时激活,而在用户键入google文档本身时不激活。
我理解为什么会这样,因为应用程序在iframe中的iframe中运行,但是我仍然认为可能有一种方法可以某种方式获取按下的键,或者至少可以某种方式确定用户是否尝试按tab键。
所以:有没有什么方法可以检测用户是否按下了Tab键,或者是否有其他方法可以通过Google Apps脚本轻松缩进多行?最好不要要求用户单击应用程序脚本本身上的按钮,但是如果那是唯一的方法,那么就可以了……但是有没有可能的方法来获取用户在google doc本身上按下的键?
在Google文档中是不可能的。您需要一个“ onEdit”或“ onChange”触发器,但是很遗憾,它们仅在Google表格中可用,而在Google文档中不可用。您可以使用此附加组件触发器页面中列出的表来查看所有Apps脚本(不仅是附加组件)中可用的触发器。
扩展有可能吗?
@bluejayke我不确定您所说的“扩展”是什么意思,但我很确定答案是否定的。Google根本没有提供将按键信息从编辑器传递到Apps Script的方法。
我的意思是浏览器的chrome扩展程序,实际上我是在了解扩展程序后才能够在content-script中做到这一点的:addEventListener(“ keyup”,e => {console.log(e.keyCode);},true),并在manifest:,“ match_about_blank”:true,“ all_frames”:true中,现在当我输入google doc时,它会控制台记录密钥代码... onyl问题现在正在将该数据发送到google app脚本,也许可以间隔一定时间来不断检查服务器,或者也许有一种方法让google app脚本从扩展名中读取postmessage?
@bluejayke可以通过Chrome扩展程序正常工作。如果您正在这样做,那么简单的修改就是让扩展程序在侧边栏中模拟一个动作(单击相应的按钮)。
有趣的主意,比如填写一个输入字段,然后单击一个提交按钮,天才!我想我将不得不找到一种方法来获取扩展以设置iframe中iframe中元素的值