问题原因核心原因navigator.clipboardAPI 在火狐浏览器中有严格的安全限制浏览器HTTPSHTTPlocalhost✅ Chrome✅ 可用⚠️ 部分可用✅ 可用❌ Firefox✅ 可用❌不可用✅ 可用⚠️ Safari✅ 可用❌ 不可用✅ 可用你的情况在 HTTP 环境下使用火狐直接报错navigator.clipboard is undefined。✅ 解决方案3种方法⭐ 方法 1使用document.execCommand(copy)最兼容⭐⭐⭐推荐这是最老但最稳定的方法所有浏览器都支持functioncopy_key(){vartext$(#key).text();// ⭐⭐⭐ 使用 execCommand兼容所有浏览器⭐⭐⭐vartextareadocument.createElement(textarea);textarea.valuetext;textarea.style.positionfixed;// 防止滚动到底部textarea.style.opacity0;// 隐藏document.body.appendChild(textarea);textarea.select();try{varsuccessfuldocument.execCommand(copy);if(successful){alert(复制成功);}else{alert(复制失败);}}catch(err){alert(复制失败: err);}document.body.removeChild(textarea);}优点✅ 兼容所有浏览器IE6 都支持✅ 不需要 HTTPS✅ 不需要权限缺点⚠️execCommand已被标记为废弃但还能用⭐ 方法 2Clipboard API 降级方案推荐⭐⭐⭐⭐优先使用 Clipboard API失败时降级到execCommandfunctioncopy_key(){vartext$(#key).text();// ⭐⭐⭐ 优先使用 Clipboard API现代浏览器⭐⭐⭐if(navigator.clipboardnavigator.clipboard.writeText){navigator.clipboard.writeText(text).then(function(){alert(复制成功);}).catch(function(err){console.error(Clipboard API 失败降级到 execCommand:,err);fallbackCopy(text);});}else{// ⭐⭐⭐ 降级到 execCommand兼容老浏览器/火狐HTTP⭐⭐⭐fallbackCopy(text);}}// 降级方案functionfallbackCopy(text){vartextareadocument.createElement(textarea);textarea.valuetext;textarea.style.positionfixed;textarea.style.opacity0;document.body.appendChild(textarea);textarea.select();try{varsuccessfuldocument.execCommand(copy);if(successful){alert(复制成功);}else{alert(复制失败);}}catch(err){alert(复制失败: err);}document.body.removeChild(textarea);}优点✅ 现代浏览器用 Clipboard API更安全✅ 老浏览器/火狐HTTP 自动降级到 execCommand✅ 完美兼容所有场景⭐ 方法 3使用第三方库 Clipboard.js最简单⭐⭐⭐⭐⭐直接引入库一行代码搞定!-- 引入 Clipboard.js --scriptsrchttps://cdn.jsdelivr.net/npm/clipboard2.0.11/dist/clipboard.min.js/script// ⭐⭐⭐ 超级简单 ⭐⭐⭐varclipboardnewClipboardJS(.copy-btn,{text:function(){return$(#key).text();}});clipboard.on(success,function(e){alert(复制成功);e.clearSelection();});clipboard.on(error,function(e){alert(复制失败: e.action);});!-- HTML --buttonclasscopy-btndata-clipboard-target#key复制/buttondividkey要复制的文本/div优点✅ 零代码开箱即用✅ 兼容所有浏览器包括火狐HTTP✅ 自动处理降级 方法对比方法代码量兼容性安全性推荐度方法1execCommand⭐⭐⭐ 中等⭐⭐⭐⭐⭐ 完美⭐⭐⭐ 一般⭐⭐⭐⭐方法2Clipboard API 降级⭐⭐⭐⭐ 较多⭐⭐⭐⭐⭐ 完美⭐⭐⭐⭐⭐ 最佳⭐⭐⭐⭐⭐方法3Clipboard.js⭐ 最少⭐⭐⭐⭐⭐ 完美⭐⭐⭐⭐⭐ 最佳⭐⭐⭐⭐⭐ 我推荐你用这个最优雅functioncopy_key(){vartext$(#key).text();// ✅ 优先用 Clipboard APIif(navigator.clipboardwindow.isSecureContext){navigator.clipboard.writeText(text).then(()alert(复制成功)).catch(()fallbackCopy(text));}else{// ✅ 降级到 execCommandfallbackCopy(text);}}functionfallbackCopy(text){vartextareadocument.createElement(textarea);textarea.valuetext;textarea.style.positionfixed;textarea.style.opacity0;document.body.appendChild(textarea);textarea.select();try{document.execCommand(copy)?alert(复制成功):alert(复制失败);}catch(err){alert(复制失败);}document.body.removeChild(textarea);} 额外提示1. 为什么window.isSecureContext// 检测是否是 HTTPS 或 localhostif(window.isSecureContext){// ✅ 可以用 Clipboard APInavigator.clipboard.writeText(text);}else{// ❌ 不能用降级到 execCommandfallbackCopy(text);}2. 火狐浏览器的特殊要求// ✅ 火狐要求必须是 HTTPS 或 localhost// ✅ 或者用户手动授予权限不推荐// 解决方案1升级到 HTTPS推荐// 解决方案2使用 execCommand 降级方案// 解决方案3使用 Clipboard.js 库 完整示例直接复制用!DOCTYPEhtmlhtmlheadscriptsrchttps://code.jquery.com/jquery-3.6.0.min.js/script/headbodydividkey这是要复制的文本/divbuttononclickcopy_key()复制/buttonscriptfunctioncopy_key(){vartext$(#key).text();// 优先用 Clipboard APIif(navigator.clipboardnavigator.clipboard.writeText){navigator.clipboard.writeText(text).then((){alert(复制成功 ✅);}).catch((){fallbackCopy(text);});}else{fallbackCopy(text);}}functionfallbackCopy(text){vartextareadocument.createElement(textarea);textarea.valuetext;textarea.style.positionfixed;textarea.style.opacity0;document.body.appendChild(textarea);textarea.select();try{document.execCommand(copy)?alert(复制成功 ✅):alert(复制失败 ❌);}catch(err){alert(复制失败 ❌);}document.body.removeChild(textarea);}/script/body/html总结问题原因解决方案火狐报错navigator.clipboard is undefinedHTTP环境不支持Clipboard API使用execCommand降级方案Chrome正常Firefox报错浏览器安全策略不同用方法2Clipboard API 降级最终答案用方法2Clipboard API execCommand 降级最完美提示如果可以建议把网站升级到HTTPS这样所有浏览器都能用 Clipboard API更安全更现代有问题欢迎在评论区交流