MediaWiki:Gadget-AudioText.js:修订间差异
外观
![]() 小 |
![]() OctoberSama(留言 | 贡献) 小 |
||
第2行: | 第2行: | ||
(function() { | (function() { | ||
mw.hook('wikipage.content').add(function() { | mw.hook('wikipage.content').add(function() { | ||
document.querySelectorAll('.audio-trigger').forEach(element => { | document.querySelectorAll('.audio-trigger').forEach(element => { | ||
element.addEventListener('click', function() { | element.addEventListener('click', async function(event) { | ||
try { | |||
event.preventDefault(); | |||
// === 调试1: 点击事件触发 === | |||
alert("🖱️ 点击事件已触发!"); | |||
// 1. 立即创建空音频对象并尝试播放(同步获取用户授权) | |||
const audio = new Audio(); | |||
. | audio.autoplay = true; | ||
// === 调试2: 开始获取用户播放权限 === | |||
alert("🔑 正在请求播放权限..."); | |||
await audio.play().catch(() => {}); // 静默忽略首次错误 | |||
// 2. 异步获取真实音频URL | |||
const audioFile = element.dataset.audioFile; | |||
const apiUrl = mw.util.wikiScript('api') + '?action=query&titles=' + | |||
encodeURIComponent(audioFile) + '&prop=imageinfo&iiprop=url&format=json'; | |||
// === 调试3: 显示API请求URL === | |||
alert("🌐 请求API:\n" + apiUrl); | |||
const response = await fetch(apiUrl); | |||
const data = await response.json(); | |||
. | // === 调试4: 显示原始API响应 === | ||
alert("📦 API原始数据:\n" + JSON.stringify(data).slice(0, 200) + "..."); | |||
}); | |||
const pages = data.query.pages; | |||
const pageId = Object.keys(pages)[0]; | |||
const audioUrl = pages[pageId].imageinfo[0].url; | |||
// === 调试5: 显示解析后的URL === | |||
alert("🎵 获得音频地址:\n" + audioUrl); | |||
// 3. 替换音频源并播放 | |||
audio.src = audioUrl; | |||
await audio.play(); | |||
// === 调试6: 播放成功反馈 === | |||
alert("✅ 播放成功!"); | |||
} catch (error) { | |||
// === 调试7: 错误捕获 === | |||
alert(`❌ 发生错误:\n${error.name}: ${error.message}`); | |||
} | |||
}); | }); | ||
}); | }); | ||
}); | }); | ||
})(); | })(); |
2025年5月24日 (六) 22:26的版本
// MediaWiki:Gadget-AudioText.js (function() { mw.hook('wikipage.content').add(function() { document.querySelectorAll('.audio-trigger').forEach(element => { element.addEventListener('click', async function(event) { try { event.preventDefault(); // === 调试1: 点击事件触发 === alert("🖱️ 点击事件已触发!"); // 1. 立即创建空音频对象并尝试播放(同步获取用户授权) const audio = new Audio(); audio.autoplay = true; // === 调试2: 开始获取用户播放权限 === alert("🔑 正在请求播放权限..."); await audio.play().catch(() => {}); // 静默忽略首次错误 // 2. 异步获取真实音频URL const audioFile = element.dataset.audioFile; const apiUrl = mw.util.wikiScript('api') + '?action=query&titles=' + encodeURIComponent(audioFile) + '&prop=imageinfo&iiprop=url&format=json'; // === 调试3: 显示API请求URL === alert("🌐 请求API:\n" + apiUrl); const response = await fetch(apiUrl); const data = await response.json(); // === 调试4: 显示原始API响应 === alert("📦 API原始数据:\n" + JSON.stringify(data).slice(0, 200) + "..."); const pages = data.query.pages; const pageId = Object.keys(pages)[0]; const audioUrl = pages[pageId].imageinfo[0].url; // === 调试5: 显示解析后的URL === alert("🎵 获得音频地址:\n" + audioUrl); // 3. 替换音频源并播放 audio.src = audioUrl; await audio.play(); // === 调试6: 播放成功反馈 === alert("✅ 播放成功!"); } catch (error) { // === 调试7: 错误捕获 === alert(`❌ 发生错误:\n${error.name}: ${error.message}`); } }); }); }); })();