为了账号安全,请及时绑定邮箱和手机立即绑定

在动态插入的iframe中做好准备

在动态插入的iframe中做好准备

跃然一笑 2019-06-27 17:19:31
在动态插入的iframe中做好准备我们使用jQuery厚箱当某人单击图片时动态显示iframe。在这个iframe中,我们正在使用盖瑞用于显示多幅图片的javascript库。问题似乎是$(document).ready在iframe中,启动得太快,iframe的内容甚至还没有加载,因此Galleria代码没有正确地应用于DOM元素。$(document).ready似乎使用iframe父准备状态来决定iframe是否就绪。如果我们在一个单独的函数中提取文档调用的函数,并在超时100 ms之后调用它。它能工作,但我们不能冒险用一台缓慢的计算机进行生产。$(document).ready(function() { setTimeout(ApplyGalleria, 100); });我的问题是:当动态iframe准备好而不仅仅是父事件时,我们应该绑定哪个jQuery事件来执行我们的代码?
查看完整描述

3 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

我回答了一个类似的问题(见当iframe完成加载时JavaScript回调?)。您可以使用以下代码获得对iframe Load事件的控制:

function callIframe(url, callback) {
    $(document.body).append('<IFRAME id="myId" ...>');
    $('iframe#myId').attr('src', url);

    $('iframe#myId').load(function() {
        callback(this);
    });}

在处理iframes时,我发现可以使用Load事件而不是DocumentReadyEvent。


查看完整回答
反对 回复 2019-06-27
?
动漫人物

TA贡献1815条经验 获得超10个赞

使用jQuery1.3.2,以下内容对我有用:

$('iframe').ready(function() {
  $('body', $('iframe').contents()).html('Hello World!');});

修订:!实际上,上面的代码有时看起来像是在Firefox中工作,而不是在Opera中工作。

相反,我为我的目的实现了一个轮询解决方案。简化如下:

$(function() {
  function manipIframe() {
    el = $('body', $('iframe').contents());
    if (el.length != 1) {
      setTimeout(manipIframe, 100);
      return;
    }
    el.html('Hello World!');
  }
  manipIframe();});

这不需要调用iframe页面中的代码。所有代码驻留并从父框架/窗口执行。


查看完整回答
反对 回复 2019-06-27
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

在IFrames中,我通常通过在块的末尾放置一个小脚本来解决这个问题:

<body>The content of your IFrame<script type="text/javascript">//<![CDATA[
   fireOnReadyEvent();
   parent.IFrameLoaded();//]]></script></body>

这对我来说大部分时间都是有用的。有时最简单、最天真的解决方案是最合适的。


查看完整回答
反对 回复 2019-06-27
  • 3 回答
  • 0 关注
  • 457 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信