You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Delphi TMS Web Core网站中实现文本复制到剪贴板?

在Delphi TMS Web Core中实现字符串复制到剪贴板的方法

由于TMS Web Core基于WebAssembly运行在浏览器环境中,VCL/FMX框架的剪贴板API无法直接生效,需要使用适配Web环境的方法实现,以下是几种可行方案:

方案一:使用TMS Web Core封装的剪贴板方法

TMS Web Core提供了封装好的剪贴板操作类,无需直接编写JS代码,更符合Delphi开发习惯:

  1. 在单元中引用Web.Clipboard
  2. 调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 21:52:41