为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

aluckdog 2023-07-20 10:53:33
背景:我正在谷歌市场插件中使用该setSelection()方法来获取谷歌文档。单击附加组件侧边栏上的相关按钮时,会按预期选择文本。但是,此选择未激活 - 即所选文本以浅灰色而不是浅蓝色突出显示(请参见下面的示例)。现在: 我需要的: 这是因为浏览器选项卡的最后一个活动部分是侧边栏(单击按钮后),而不是实际文档。问题:有没有办法让按钮单击选择文本并使文档保持活动部分?目标:Ctrl + C此选择的全部目的是通过键盘复制所选文本,当选择未激活时这是不可能的。现在用户需要使用鼠标右键单击并Copy从菜单中选择...
查看完整描述

2 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

在客户端代码中,使用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) 结合使用特别有用。


查看完整回答
反对 回复 2023-07-20
?
MMTTMM

TA贡献1869条经验 获得超4个赞

解决方案

由于您的目标是复制所选文本,我想提出一个替代解决方案:


现在,任务将直接包括复制功能,除了单击按钮之外,无需其他用户输入。它将这样开发:


文本选择

通过单击按钮触发 Apps 脚本功能来获取所选文本:


//... Your custom logic to get the text selection

var text-to-copy = doc.setSelection(x)

                      .getSelection()

                      .getRangeElements()

                      .map(re => re.getElement()

                                   .asText()

                                   .getText())

                      .join(" ");

return text-to-copy;

我们无法从 Apps 脚本访问用户剪贴板,但successHandler可以使用 a 将text-to-copy变量传递到客户端界面。


处理服务器端返回值

通过以下方式,我们可以将文本传递回 HTML 侧边栏。


<!-- HTML Interface Index.html -->


<button onclick="google.script.run.withSuccessHandler(copyToClipboard).setSelection()">

   Click Here

</button>

<script>

    function copyToClipboard(text) {

        const elem = document.createElement('textarea');

        elem.value = text;

        document.body.appendChild(elem);

        elem.select();

        document.execCommand('copy');

        document.body.removeChild(elem);

    }

</script>

现在,我们可以利用本机客户端功能将该文本直接复制到用户剪贴板,而无需在Ctrl+C脚本完成后让她/他复制。


在这种情况下,一个好的做法是在复制过程完成后向用户提供视觉反馈。


查看完整回答
反对 回复 2023-07-20
  • 2 回答
  • 0 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信