| 方案 | 優點 | 缺點 | 兼容性 |
|---|---|---|---|
| HTML5 ` | 標準、API 豐富、無插件 | IE9- 不支持、移動端需用戶交互觸發、格式需多備 (mp3/ogg/wav) | IE9+、現代瀏覽器 |
| ` | IE6-8 支持、可隱藏 | 需插件、移動端不支持、API 差、安全風險 | IE (需 WMP)、舊版 Firefox/Chrome |
| Flash (SWF) | 曾經統一跨平台 | **已死** (2020 停止支持)、移動端不支持、安全漏洞多 | 歷史 |
| Web Audio API | 高性能、精確控制、合成、可視化 | IE 不支持、API 複雜、移動端策略同 Audio | 現代瀏覽器 |
// 統一使用 HTML5 Audio,優雅降級
const audioPool = new Map(); // URL -> HTMLAudioElement
function playSoundModern(url) {
let audio = audioPool.get(url);
if (!audio) {
audio = new Audio(url);
audio.preload = 'auto';
audioPool.set(url, audio);
}
// 克隆以支持快速重複播放 (可選)
const clone = audio.cloneNode();
clone.play().catch(e => {
// 自動播放被阻擋:提示用戶交互、或降級 embed
console.warn('Auto-play blocked:', e);
fallbackEmbedPlay(url);
});
}
function fallbackEmbedPlay(url) { /* 上述 embed 方案 */ }
**原則**:優先 HTML5 Audio (標準、無插件、Web Audio API 基礎),檢測失敗/阻擋時降級 Embed,移動端引導用戶交互解鎖。