如何为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




