jQuery UI 对话框中的 IFrame 有时不会在 Chrome 中加载内容,直到对话框被移动或调整大小(但适用于 FF 和 Edge)

Posted

技术标签:

【中文标题】jQuery UI 对话框中的 IFrame 有时不会在 Chrome 中加载内容,直到对话框被移动或调整大小(但适用于 FF 和 Edge)【英文标题】:IFrame in jQuery UI dialog sometimes doesn't load content in Chrome until dialog is moved or resized (but works in FF and Edge) 【发布时间】:2021-04-28 16:15:20 【问题描述】:

这真的很奇怪。我有一个网站,它大量使用 jQuery UI 对话框来显示 iframe。 iframe 从网站本身加载内容,因此不存在来源问题。

在 FireFox 和 Edge 中完美运行。但是在 Chrome(我的版本是 87)中,它有时只是显示一个白色的空白对话框,直到您单击标题栏并移动它!或者,直到您打开开发者工具。

这让我非常抓狂,但如果其他人也有同样的奇怪问题,我最终找到了两个解决方案(发布在下面)。

【问题讨论】:

【参考方案1】:

第一步: 当 iframe 完成加载时,我必须添加一些代码。例如:

// if we are inside our iframe...
$(document).ready(function()  parent.nudgeiFrame(); );

这会调用 PARENT 页面上的一个函数来加载对话框,而不是从 iframe 本身中调用!

解决方案 #1(不太优雅)

它会在短暂的延迟后将整个对话“微调”一个像素。这工作得非常好,但如果他们不断重新加载它,它的缺点是会让你的对话框慢慢地在屏幕上向下移动。大多数用户可能永远不会注意到它,所以我保留了一段时间:

function nudgeiFrame() 
  setTimeout(function() 
    $("div[role=dialog]").each(function() 
        
        $(this).addClass('ui-draggable-dragging');        
        $(this).addClass('ui-dialog-dragging');
        var y = $(this).css('top');
        var oldy = y;        
        y = parseFloat(y.replace("px", ""));        
        var newy = (y + 1) + "px";              
        $(this).css('top',  newy);
        
     );
  , 75);

解决方案 #2(更优雅)

我发现(通过数小时的测试)我真正需要做的就是向对话框(而不是 iframe)添加内容。

我决定添加一个简单的,这样它就不会导致对话框调整大小或类似的东西。信不信由你,这行得通,不会造成我所看到的任何不良影响。

function nudgeiFrame() 
  setTimeout(function() 
    $("div[role=dialog]").each(function() 
        
        $(this).append("<span></span>");

     );
  , 75);

我希望这对那里的人有所帮助。我花了这么长时间才弄明白。

【讨论】:

以上是关于jQuery UI 对话框中的 IFrame 有时不会在 Chrome 中加载内容,直到对话框被移动或调整大小(但适用于 FF 和 Edge)的主要内容,如果未能解决你的问题,请参考以下文章

如何在iframe外部的父窗口上显示Jquery UI对话框

在 jQuery UI 对话框中以编程方式创建的 iframe 的大小

在 UI 对话框中加载 iframe 不起作用

jQuery ui 可拖动拖放到 iframe

jQuery UI 对话框/拖动问题

iFrame 上的 jQuery 模态对话框