带有iframe的jQuery .empty(),其src是一个pdf,打破了Internet Explorer中的插件

时间:2013-07-09 19:52:04

标签: javascript jquery html internet-explorer iframe

在Internet Explorer 8-10中,如果我的iframe源为PDF,并且iframe包含在div中,并且我在该包装div上调用jQuery.empty(),则似乎有某种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()之前的{{1}}会有效,但之后似乎没有任何效果我似乎陷入了这种情况。

1 个答案:

答案 0 :(得分:0)

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

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

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

编辑:这是错误的,只有当您针对iframe的直接父级而不是高于此级别的任何内容调用它时,它才有效。