如何禁用iframe src属性加载的PDF中的超链接且不影响其他功能
方案1:使用PDF.js渲染PDF(最推荐,跨域也可用)
直接替换原生iframe加载方式,改用Mozilla开源的PDF.js库渲染PDF,完全自主控制渲染逻辑,不会影响工具栏的下载、打印、缩放等操作,只需要拦截链接点击即可:
- 引入PDF.js及自带的Viewer组件
- 在PDF渲染完成的回调中,拦截所有超链接元素的点击事件:
// 监听PDF渲染完成事件 document.addEventListener('pagerendered', () => { // 遍历所有PDF内的超链接 document.querySelectorAll('.textLayer a').forEach(link => { link.addEventListener('click', e => { e.preventDefault() e.stopImmediatePropagation() }) }) })
方案2:同域场景下iframe注入拦截脚本
如果你的PDF资源和当前站点符合同源策略,可直接在iframe加载完成后,注入点击拦截逻辑,无需替换现有iframe方案:
修改你的showIframe回调函数即可:
showIframe() { const iframe = document.querySelector('.iframe') const innerWindow = iframe.contentWindow const innerDoc = iframe.contentDocument || innerWindow.document // 捕获阶段监听所有点击,拦截超链接 innerDoc.addEventListener('click', e => { if (e.target.closest('a')) { e.preventDefault() e.stopPropagation() } }, true) }
注意:跨域场景下浏览器会禁止操作iframe内部DOM,该方案不可用
方案3:服务端预处理PDF(无前端兼容问题)
直接在服务端对上传的PDF文件进行处理,删除文件内所有超链接锚点,处理后的PDF不管用什么方式加载都不会有可点击的超链接,完全不影响前端任何交互功能。
可使用的处理工具:Java生态用iText、Python生态用PyPDF2、Node.js生态用pdf-lib。
内容的提问来源于stack exchange,提问作者akhil
相关产品推荐
相关产品推荐

