You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS追加Genius API返回的歌词嵌入内容仅显示部分内容的问题

解决Genius API嵌入内容动态追加后无法显示完整歌词区域的问题

问题原因

当你通过jQuery的.append()方法动态插入包含<script>标签的Genius嵌入内容时,jQuery不会自动执行这段脚本。而直接将嵌入内容写在静态HTML页面中时,浏览器在加载页面过程中会自动解析并执行脚本,因此能正常渲染完整的歌词区域。

解决方案

需要手动分离嵌入内容中的DOM元素和脚本,先插入DOM部分,再单独创建并添加脚本元素,触发浏览器加载执行:

async function fetchLyrics(songId) {
    let response = await fetch(`https://api.genius.com/songs/${songId}?text_format=plain&access_token=xxx`);
    let lyricData = await response.json();
    const embedContent = lyricData.response.song.embed_content;
    
    // 创建临时容器解析嵌入内容
    const tempContainer = document.createElement('div');
    tempContainer.innerHTML = embedContent;
    
    // 提取嵌入用的div和script标签
    const embedDiv = tempContainer.querySelector('.rg_embed_link');
    const embedScript = tempContainer.querySelector('script');
    
    // 将div插入目标容器
    $('.lyricsContainer').append(embedDiv);
    
    // 手动创建并添加脚本,触发执行
    if (embedScript) {
        const newScript = document.createElement('script');
        newScript.crossOrigin = embedScript.crossOrigin;
        newScript.src = embedScript.src;
        document.body.appendChild(newScript);
    }
}

原理说明

动态创建的<script>元素被添加到DOM后,浏览器会自动发起请求加载脚本并执行,这会触发Genius的嵌入逻辑,将简单的链接替换为完整的歌词区域。而直接用jQuery追加带script的HTML时,jQuery内部会对脚本做特殊处理(不会自动执行),因此无法触发嵌入渲染。

内容的提问来源于stack exchange,提问作者Damian Peiris.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 17:52:39