今天我遇到了一个稍微激动我的问题。我正在为特定的基于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!");
});
});
然而,这既不成功,也绝不会传递/匹配第二帧。
提前致谢!
答案 0 :(得分:0)
当你加载第一个时,你说第二个iframe
不存在。
委派的处理程序将负责处理。
$('divAroundBothIframes').on('load', '#secondiframe', function() {
console.log("We made it!");
});
或者那条线周围的东西,摆弄一下。
答案 1 :(得分:0)
在这种情况下,我所做的是在父页面编写一个函数,并在iframe内容中包含onload。您可以使用parent.functionName();
在父窗口中调用该函数在你的情况下,我建议如果加载了iframe,则保持变量指向。类似isIFrame1Loaded和isIFrame2Loaded的东西。这些应该由内部iframe触发的onLoad函数更新。他们还应该检查是否设置了所有变量,如果是,请执行代码。