首页 > 解决方案 > 显示 base64 编码 pdf 的 iframe 上的 JQuery .contents()

问题描述

我有一个显示 base64 编码 PDF 的 iframe。加载后,我尝试执行.contents().find(..),但是找不到内容。iframe 中包含正确加载的 HTML 文档,其中包含 PDF 和一个文本元素" "。Doing.contents()将返回一项,即 text " "

如果我不包含 base64 字符串作为 iframe ( data:application/pdf;base64,..) 的源,所有这些代码都可以正常工作。PDF 本身显示正常并且加载正确,但我找不到通过 JS/JQuery 访问文档的方法。我不认为这是一个时间问题,因为在调试器模式下,当它失败之前在该行暂停时,我可以看到内容已完全加载(此外,.on('load', ..)正在使用该方法)。

相关代码(ASP .NET MVC):

HTML:

<iframe class="converted-display"  id="doc-iframe" src="@ViewBag.RAWData">
</iframe>

JS:

$(document).ready(function () {

    var url = window.location.href

    if (url.toLowerCase().includes("convert")) {
        $('#doc-iframe').on('load', function () {
            debugger
            $('#doc-iframe').contents().find('body').addClass('..')

            var element = $('#doc-iframe').contents().find('head').first()[0];

            var style = document.createElement('style');

            style.innerHTML = ..

            window.styleNode = style;

            element.parentNode.insertBefore(style, element);
        })
    }

})

ViewBag.RAWData将包含一个 ( data:application/pdf;base64,..) 字符串。

$('#doc-iframe') 在调试器处暂停时的结果,清楚地表明文档已加载

显示 .contents() 的结果并尝试对其进行索引

为了排除异步问题,我还在页面完全加载后尝试了控制台中的命令,并遇到了同样的问题。

有没有人有任何建议或资源?我已经阅读了 .contents() 和其他各种文档的文档,还尝试了 JS 的多种变体,以及显示 PDF 的不同方法,例如对象、嵌入,这让我想知道根本问题是否是正在提供的 src。

非常感谢您的帮助。

更新:

跨域问题,这是我没想到的,因为数据在加载时本质上是硬编码的 - 关于如何解决这个问题的任何建议?

标签: javascripthtmljquerypdfiframe

解决方案


推荐阅读