1

在 Internet Explorer 8-10 中,如果我有一个源为 PDF 的 iframe,并且该 iframe 被包装在一个 div 中,并且我调用jQuery.empty()该包装 div,则 PDF 插件和 IE 之间似乎存在某种交互导致插件中断,变得非交互(从 DOM 中删除后无法对文档执行任何操作),并且在某些情况下忽略滚动,浮动在页面上方。

示例代码:

<button id="remove">remove</button>
<div style="height:2000px">
    <div style="height:500px; width:800px;" id="embedDiv">
        <iframe style="width:100%; height:100%;" src="somepdf.pdf"></iframe>
    </div>
</div>

<script type="text/javascript">
    $(function () {
        $("#remove").click(function () {
            $("#embedDiv").html("Some Content!");
        });
    });
</script>

可以在http://jsfiddle.net/j2e56/找到工作示例

.empty() 被调用后,有什么方法可以隐藏/删除这个嵌入的pdf?我在一个我真的不知道如何或何时从页面中删除我的框架的环境中工作,并且我无法控制如何删除它。事后我可以使用 setInterval 定期检查 iframe 是否仍在文档上,但我不知道该怎么做。

src将框架上的属性设置为'''about:blank'将在之前empty()调用,但之后似乎没有任何效果,这就是我在这种情况下似乎陷入困境的地方。

4

1 回答 1

0

好的,这不是完美的解决方案,但它现在适用。

解决方案是附加到 onbeforeunload,但问题是 IE 一旦转换为 pdf iframe 就不会尊重这些回调。所以我所做的是在文档中的 pdf iframe 之前添加一种“金丝雀”iframe,并附加到卸载那个 iframe。当检测到卸载情况时,canary 卸载回调将 pdf iframe 上的 src 设置为 '' 以便可以成功卸载。

请注意,这仅在您在调用 html() 之前使用 .empty() 时才有效。

编辑:这是错误的,它仅在您针对 iframe 的直接父级调用它时才有效,而不是在此之上。

于 2013-07-12T18:12:20.590 回答