猿问

通过侧边栏按钮设置文本的 setSelection() - 如何使其成为活动选择?

背景:

我正在谷歌市场插件中使用该setSelection()方法来获取谷歌文档。

单击附加组件侧边栏上的相关按钮时,会按预期选择文本。但是,此选择未激活 - 即所选文本以浅灰色而不是浅蓝色突出显示(请参见下面的示例)。

现在: 

我需要的: http://img3.sycdn.imooc.com/64b8a1d80001e56a01020025.jpg

这是因为浏览器选项卡的最后一个活动部分是侧边栏(单击按钮后),而不是实际文档。

问题:

有没有办法让按钮单击选择文本并使文档保持活动部分?

目标:

Ctrl + C此选择的全部目的是通过键盘复制所选文本,当选择未激活时这是不可能的。

现在用户需要使用鼠标右键单击并Copy从菜单中选择...


aluckdog
浏览 120回答 2
2回答

皈依舞

在客户端代码中,使用google.script.host.editor.focus()使编辑器上的选择成为活动选择。function showSidebar(){  var ui = DocumentApp.getUi();  var html = '<div>Hello world!</div>'  html += '<div><button onclick="google.script.host.editor.focus()">Click me!</button></div>';  ui.showSidebar(HtmlService.createHtmlOutput(html));}在 Google Workspace 中移动浏览器焦点要将用户浏览器中的焦点从对话框或侧边栏切换回 Google 文档、表格或表单编辑器,只需调用方法 google.script.host.editor.focus() 即可。此方法与文档服务方法 Document.setCursor(position) 和 Document.setSelection(range) 结合使用特别有用。

MMTTMM

解决方案由于您的目标是复制所选文本,我想提出一个替代解决方案:现在,任务将直接包括复制功能,除了单击按钮之外,无需其他用户输入。它将这样开发:文本选择通过单击按钮触发 Apps 脚本功能来获取所选文本://... Your custom logic to get the text selectionvar text-to-copy = doc.setSelection(x)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .getSelection()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .getRangeElements()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .map(re => re.getElement()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.asText()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.getText())&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .join(" ");return text-to-copy;我们无法从 Apps 脚本访问用户剪贴板,但successHandler可以使用 a 将text-to-copy变量传递到客户端界面。处理服务器端返回值通过以下方式,我们可以将文本传递回 HTML 侧边栏。<!-- HTML Interface Index.html --><button onclick="google.script.run.withSuccessHandler(copyToClipboard).setSelection()">&nbsp; &nbsp;Click Here</button><script>&nbsp; &nbsp; function copyToClipboard(text) {&nbsp; &nbsp; &nbsp; &nbsp; const elem = document.createElement('textarea');&nbsp; &nbsp; &nbsp; &nbsp; elem.value = text;&nbsp; &nbsp; &nbsp; &nbsp; document.body.appendChild(elem);&nbsp; &nbsp; &nbsp; &nbsp; elem.select();&nbsp; &nbsp; &nbsp; &nbsp; document.execCommand('copy');&nbsp; &nbsp; &nbsp; &nbsp; document.body.removeChild(elem);&nbsp; &nbsp; }</script>现在,我们可以利用本机客户端功能将该文本直接复制到用户剪贴板,而无需在Ctrl+C脚本完成后让她/他复制。在这种情况下,一个好的做法是在复制过程完成后向用户提供视觉反馈。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答