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) 结合使用特别有用。
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脚本完成后让她/他复制。
在这种情况下,一个好的做法是在复制过程完成后向用户提供视觉反馈。
添加回答
举报