如何在Delphi TMS Web Core网站中实现文本复制到剪贴板?
在Delphi TMS Web Core中实现字符串复制到剪贴板的方法
由于TMS Web Core基于WebAssembly运行在浏览器环境中,VCL/FMX框架的剪贴板API无法直接生效,需要使用适配Web环境的方法实现,以下是几种可行方案:
方案一:使用TMS Web Core封装的剪贴板方法
TMS Web Core提供了封装好的剪贴板操作类,无需直接编写JS代码,更符合Delphi开发习惯:
- 在单元中引用
Web.Clipboard - 调用
Clipboard.WriteText方法实现复制:
uses Web.Clipboard; procedure TForm1.btnCopyToClipboardClick(Sender: TObject); var TargetText: string; begin TargetText := '需要复制的目标字符串'; if Clipboard.WriteText(TargetText) then ShowMessage('文本已成功复制到剪贴板') else ShowMessage('复制失败,请检查浏览器权限'); end;
方案二:直接调用浏览器原生Clipboard API
通过Delphi的asm块执行JavaScript代码,调用浏览器的Clipboard API:
procedure TForm1.btnCopyClick(Sender: TObject); var CopyText: string; begin CopyText := '要复制的文本内容'; asm navigator.clipboard.writeText(CopyText) .then(() => { console.log('复制成功'); }) .catch(err => { console.error('复制出错:', err); }); end; end;
注意:该方法要求页面处于HTTPS环境(本地localhost开发不受限制),且操作必须由用户交互触发(如点击按钮),否则会被浏览器权限拦截。
方案三:兼容旧浏览器的降级方案
对于不支持Clipboard API的旧浏览器,可以通过创建临时输入框的方式实现复制(该方法依赖已废弃的execCommand,但目前多数浏览器仍兼容):
procedure TForm1.btnCopyLegacyClick(Sender: TObject); var CopyText: string; begin CopyText := '需要复制的文本'; asm const tempInput = document.createElement('input'); tempInput.value = CopyText; document.body.appendChild(tempInput); tempInput.select(); document.execCommand('copy'); document.body.removeChild(tempInput); end; end;
通用注意事项
- 所有剪贴板操作必须由用户主动触发(如按钮点击事件),浏览器禁止自动执行剪贴板操作,避免权限报错。
- 部分浏览器会弹出剪贴板权限请求,需确保用户允许权限。
内容的提问来源于stack exchange,提问作者Shaun Roselt
相关产品推荐
相关产品推荐

