带有iframe的jQuery.empty(),其src是internetexplorer中的pdf breaks插件

jQuery .empty() with iframe whose src is a pdf breaks plugin in internet explorer

本文关键字:internetexplorer src 中的 pdf 插件 breaks iframe jQuery empty 带有      更新时间:2023-09-26

在Internet Explorer 8-10中,如果我有一个源为PDF的iframe,并且该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是否在文档中,但我不知道如何做到这一点。

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

好吧,这不是一个完美的解决方案,但它现在有效。

解决方案是附加到onbeforeunload,但问题是IE一旦转换为pdf iframe,就不会接受这些回调。因此,我所做的是在文档中的pdf iframe之前添加一种"金丝雀"iframe,并附加到该iframe上进行卸载。当检测到卸载情况时,canary卸载回调将pdf iframe上的src设置为",以便成功卸载。

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

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