JQuery - 等待嵌套的iFrame完成加载

时间:2014-01-29 16:51:29

标签: javascript jquery iframe

今天我遇到了一个稍微激动我的问题。我正在为特定的基于Web的应用程序编写Chrome扩展程序。网页是一个(包装)iframe,在真实页面中可以找到,但在iframe中甚至是更多的iframe。

为了确定我目前在应用程序中的位置,我需要阅读一些数据,这是两个深度的iframe。我找到了一种方法来获取我正在寻找的字符串:

document.getElementById("firstiframe").contentWindow.document.getElementById("secondiframe").contentWindow.document.getElementById("theelement").innerText;

这里的问题是,当执行此操作时,必须存在所有需要的帧。由于在执行脚本后加载secondiframe,因此它在getElementById("secondiframe")处失败,因为它尚不存在。

在我看来,我需要耐心等待第二个iframe加载,直到我执行搜索。在这里,我不能比第一个iframe更进一步。

$('#firstiframe').load(function() {
    $('#secondiframe').load(function() {
        console.log("We made it!");
    });
});

那没用,有人建议我找这样的东西:

$('#firstiframe').load(function() {
    $(this).contents().find('#secondiframe').load(function() {
        console.log("We made it!");
    });
});

然而,这既不成功,也绝不会传递/匹配第二帧。

提前致谢!

2 个答案:

答案 0 :(得分:0)

当你加载第一个时,你说第二个iframe不存在。 委派的处理程序将负责处理。

$('divAroundBothIframes').on('load', '#secondiframe', function() {
    console.log("We made it!");    
});

或者那条线周围的东西,摆弄一下。

http://api.jquery.com/on/

答案 1 :(得分:0)

在这种情况下,我所做的是在父页面编写一个函数,并在iframe内容中包含onload。您可以使用parent.functionName();

在父窗口中调用该函数

在你的情况下,我建议如果加载了iframe,则保持变量指向。类似isIFrame1Loaded和isIFrame2Loaded的东西。这些应该由内部iframe触发的onLoad函数更新。他们还应该检查是否设置了所有变量,如果是,请执行代码。