You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何为Blogger嵌入的Pastebin添加复制到剪贴板按钮及替代工具推荐

刚好我之前帮朋友处理过类似的Blogger嵌入代码加复制按钮的需求,给你分两部分来解决:一是给现有的Pastebin/Gist嵌入添加复制按钮的方法,二是推荐自带嵌入+复制功能的替代工具,帮你省掉重复写代码的麻烦。


一、给现有Pastebin/Gist嵌入添加复制到剪贴板按钮

因为Pastebin和Gist的嵌入都是iframe或远程脚本,直接操作内部内容会有跨域限制,我们可以通过它们的公开API获取原始代码,再实现复制功能。

1. 针对Pastebin嵌入

步骤如下:

  • 给每个Pastebin嵌入套一个容器,同时添加自定义复制按钮:
<div class="pastebin-container">
  <iframe src="https://pastebin.com/embed_iframe/[你的pasteID]" style="border:none;width:100%;height:300px"></iframe>
  <button class="copy-btn" data-paste-id="[你的pasteID]">复制代码</button>
</div>
  • 打开Blogger的模板编辑,在</body>标签前添加通用的JavaScript:
// 监听所有复制按钮的点击事件
document.addEventListener('click', async (e) => {
  if (e.target.classList.contains('copy-btn')) {
    const pasteId = e.target.dataset.pasteId;
    try {
      // 通过Pastebin Raw接口获取代码内容
      const response = await fetch(`https://pastebin.com/raw/${pasteId}`);
      const code = await response.text();
      // 复制到剪贴板
      await navigator.clipboard.writeText(code);
      // 给用户反馈
      e.target.textContent = '已复制!';
      setTimeout(() => e.target.textContent = '复制代码', 2000);
    } catch (err) {
      console.error('复制失败:', err);
      e.target.textContent = '复制失败';
      setTimeout(() => e.target.textContent = '复制代码', 2000);
    }
  }
});
  • 可选:添加一点CSS美化按钮(同样放在模板的<style>标签里):
.copy-btn {
  margin-top: 8px;
  padding: 6px 12px;
  background: #007bff;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}
.copy-btn:hover {
  background: #0056b3;
}

2. 针对GitHub Gist嵌入

Gist有官方API可以获取代码内容,操作逻辑类似:

  • 包裹嵌入代码并添加按钮:
<div class="gist-container">
  <script src="https://gist.github.com/[你的用户名]/[gistID].js"></script>
  <button class="copy-gist-btn" data-gist-id="[gistID]">复制代码</button>
</div>
  • 对应的JavaScript(同样放在</body>前):
document.addEventListener('click', async (e) => {
  if (e.target.classList.contains('copy-gist-btn')) {
    const gistId = e.target.dataset.gistId;
    try {
      // 获取Gist的完整数据
      const response = await fetch(`https://api.github.com/gists/${gistId}`);
      const gistData = await response.json();
      // 提取第一个文件的内容(如果有多个文件,可调整逻辑让用户选择)
      const code = Object.values(gistData.files)[0].content;
      await navigator.clipboard.writeText(code);
      e.target.textContent = '已复制!';
      setTimeout(() => e.target.textContent = '复制代码', 2000);
    } catch (err) {
      console.error('复制失败:', err);
      e.target.textContent = '复制失败';
      setTimeout(() => e.target.textContent = '复制代码', 2000);
    }
  }
});

注意:如果你的Gist包含多个文件,需要额外处理逻辑(比如给每个文件加单独的复制按钮),上面的代码默认复制第一个文件的内容。


二、自带嵌入+复制按钮的替代工具

如果不想重复编写复制代码,这些工具可以直接满足你的需求:

  • GitLab Snippets:GitLab的代码片段功能,嵌入时自带复制按钮,支持语法高亮、私密/公开片段,复制生成的嵌入代码到Blogger即可使用。
  • 新版GitHub Gist:其实新版Gist的嵌入代码已经自带复制按钮了,你可以重新从Gist页面的「Embed」按钮获取最新代码,默认就有一键复制功能。
  • CodePen:适合前端代码展示,嵌入的Pen自带复制按钮(可单独复制HTML/CSS/JS),还支持实时预览,非常适合分享前端示例。
  • Paste.ee:简洁的代码分享工具,嵌入的代码块自带复制按钮,支持语法高亮,嵌入流程简单直接。
  • CodeSandbox:前端项目分享工具,嵌入的沙箱支持复制整个项目或单个文件的代码,适合分享完整的前端项目示例。

这些工具的嵌入代码都内置了复制功能,你只需要复制生成的代码到Blogger帖子中,无需额外编写任何JS/CSS。

内容的提问来源于stack exchange,提问作者mabt

火山引擎 最新活动