【问题标题】:Whitescreen issue in IE9 - Removing iframeIE9 中的白屏问题 - 删除 iframe
【发布时间】:2012-03-19 00:58:48
【问题描述】:

我想知道是否有人可以让我了解我一直在努力解决的一个非常奇怪的 IE9 问题。

我正在完成一个工作站点的制作 - 它在 ff/chrome/ie7/ie8 中运行良好,没有脚本错误。

在 IE9 上,应用程序的最后一步会导致整个选项卡变成白屏,没有脚本错误或警告。 (将文档模式改为ie8可以解决问题,但显然不适合生产)

不幸的是,该站点非常复杂,包含大量 ajax 和页内脚本,因此我无法真正轻松地发布相关代码。我更想弄清楚如何诊断。

我检查了 IE 错误日志,它们是空的。 Web 开发人员工具什么也没告诉我。该网站未使用任何插件(Flash/Silverlight 等),仅使用带有 jQ​​uery 的 javascript。

在失败的步骤周围的 iframe 中显示了一个 PDF - 但在上一步(使用相同的方法)中显示了几乎相同的 pdf,没有问题。代码在调用 jquery UI 窗口时失败,但我似乎无法得到确切的行。

如果有人知道如何尝试进一步诊断,我将不胜感激。我可以继续寻找错误,但我以前从未见过这种行为,只是不确定我在寻找什么。

【问题讨论】:

  • 您是否尝试过检查浏览器是否以 Quirks 模式呈现页面?这可能与浏览器如何处理盒子模型有关......
  • @mamoo 如果怪癖模式是问题,IE8 也会有同样的问题......或者至少应该。
  • 是的,我刚刚检查过:它应该......你是对的。 en.wikipedia.org/wiki/Quirks_mode
  • 我能给@apocalypse9 的唯一建议是使用内置的 IE 开发工具在代码中设置一些断点,然后逐步检查它可能出错的地方。如果您有一个可以发布此示例的实时网页,我们可能会提供更多帮助
  • 您是否尝试过使用 fiddler 在最后一步或通过 IE 开发人员工具栏上的网络选项卡检查浏览器和服务器之间的通信内容。

标签: javascript internet-explorer-9 jquery-ui-dialog


【解决方案1】:

在尝试使用 AngularJS 删除 div 中的 iframe 时,我在 IE11 上遇到了同样的问题。首先删除 iframe 只会导致同样的问题,所以我先将 iframe src 导航到新页面(about:blank),然后删除有效的 div。希望这可以帮助遇到类似问题的人。

伪代码如下:

$ctrl.iframeUrl = 'about:blank'; // change the iframe url here
$timeout(function(){
    $ctrl.removeIframe(); // remove the iframe here
});

【讨论】:

    【解决方案2】:

    感谢您对此的所有意见。抱歉,我一次被几个项目完全淹没了,所以我无法发布调试步骤的更新。

    这花了很长时间,但当我关闭包含第一个 PDF 的对话框时,我终于意识到一切都崩溃了。

    我的一个辅助功能是打开对话框并在关闭时自动销毁内容。通常这可以正常工作,因为我要么删除包含页面片段的 div,要么删除 iframe。

    在这种情况下,我在对话框中加载了一个页面片段,其中包含一些按钮和 pdf iframe。我在包含 iframe 而不是 iframe 本身的父元素上调用了 .remove() 方法。出于某种原因,这似乎在所有其他浏览器中都可以正常工作 - 但在 IE9 中,它几乎会在没有任何警告或消息的情况下杀死页面呈现。

    我强烈怀疑罪魁祸首是 adobe 插件,但我不完全确定。

    这里是修复-
    html:

    <div id="container">
     <iframe src="loremipsum.pdf"></iframe>
    </div>
    

    Javascript:

    //Ruins my entire week
    $("#container").remove(); 
    
    //Works as the pdf is removed directly
    $("#container").find("iframe").remove().end().remove(); 
    

    【讨论】:

    • 晦涩难懂,但我遇到了同样的问题,您的修复工作有效。谢谢!
    • 在找到这个答案之前,我搜索了几个小时的解释。一个非常令人沮丧的问题,甚至在调试中找到该区域也会留下关于原因的问题。这个问题很难找到,但我很高兴我找到了
    • 向你致敬,凯利!我们在使用 Angular 时遇到了这个问题 - 我们为 tabs 数组创建了作为 ng-repeat 的文档选项卡。关闭选项卡是在选项卡上使用 splice 完成的,这会呈现白页并让我们解决您的问题。使用您的方法,我们添加了jQuery并首先删除了适当的iframe,然后应用了splice -> 屏幕仍然呈现白色,但在2秒后恢复正常。 Sheeeeesh...真是个错误...我们很高兴找到您的答案!
    【解决方案3】:

    作为一个尝试 - 在 IE9 DOM 查看器出现白屏后查看它的内容。很有可能大多数东西都在那里,只是没有正确渲染(或者在上面渲染了其他东西)。至少,知道它是否从 DOM 中丢失了大量的东西应该会给你一些有用的数据。

    【讨论】:

    • 不幸的是,根据 DOM 查看器,那里什么都没有 - 希望我们只是在它上面有一个 div 或其他东西,但它什么都没有。
    • 这实际上是有用的数据。这意味着无论它是什么导致你的 DOM 崩溃的逻辑缺陷,而不是某种渲染错误。
    • 感谢您的信息 - 看起来是 adobe 插件崩溃了,因为我从 DOM 中删除了保存 iframe 的元素(而不是 iframe 本身)
    猜你喜欢
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 2016-08-20
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 2022-01-25
    相关资源
    最近更新 更多