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

使用data-popup:lightbox弹窗失效,报错Not allowed to navigate top frame to data URL

解决data-popup:lightbox加载base64图片弹窗失败的问题

你使用data-popup:lightbox实现图片弹窗时,图片无法正常显示,运行时出现以下错误:

Not allowed to navigate top frame to data URL: data:image/jpeg;base64,

你的代码如下:

<td>
  <a href="${data.trRadFoto}" data-popup="lightbox">
     <img src="${data.trRadFoto}" width="50px" alt="" class="img-preview rounded">
  </a>
</td>

问题原因

现代浏览器出于安全策略,禁止通过顶级框架导航到data URI格式的资源。你所用的lightbox插件应该是尝试直接将<a>标签的href(base64图片地址)作为弹窗页面打开,触发了这个限制,导致图片无法加载。

解决方案

1. 自定义点击事件绕过限制

阻止<a>标签的默认跳转行为,手动构建弹窗并加载图片:

修改HTML(添加自定义类名方便绑定事件):

<td>
  <a href="${data.trRadFoto}" data-popup="lightbox" class="custom-lightbox">
     <img src="${data.trRadFoto}" width="50px" alt="" class="img-preview rounded">
  </a>
</td>

添加JavaScript逻辑:

// 绑定所有lightbox链接的点击事件
document.querySelectorAll('.custom-lightbox').forEach(link => {
  link.addEventListener('click', function(e) {
    e.preventDefault(); // 阻止默认跳转行为
    const imgUrl = this.getAttribute('href');
    
    // 创建弹窗容器
    const lightboxOverlay = document.createElement('div');
    lightboxOverlay.style.cssText = `
      position: fixed;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      background-color: rgba(0, 0, 0, 0.8);
      display: flex;
      justify-content: center;
      align-items: center;
      z-index: 9999;
      cursor: pointer;
    `;
    
    // 创建弹窗内的图片元素
    const lightboxImg = document.createElement('img');
    lightboxImg.src = imgUrl;
    lightboxImg.style.cssText = `
      max-width: 90%;
      max-height: 90%;
      border-radius: 4px;
    `;
    
    // 点击弹窗关闭
    lightboxOverlay.addEventListener('click', () => {
      lightboxOverlay.remove();
    });
    
    lightboxOverlay.appendChild(lightboxImg);
    document.body.appendChild(lightboxOverlay);
  });
});

2. 更换兼容data URL的lightbox插件

如果不想手动写弹窗逻辑,可以选择原生支持加载data URI图片的lightbox工具(如Magnific Popup、Fancybox),这类插件会在弹窗内直接创建<img>元素加载图片,不会触发data URL的导航限制。

3. 转换base64为服务器文件(可选)

如果项目允许,将前端的base64图片上传到服务器,生成普通的HTTP/HTTPS链接替换${data.trRadFoto},原lightbox逻辑即可正常运行,同时也能减少页面加载体积。

内容的提问来源于stack exchange,提问作者Eliavina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 04:10:43