您无法访问iframe的ready函数中的变量,原因是您无法访问任何其他函数的局部变量(您无法“向下”访问作用域)。但是,如果您可以修改iframe中的代码,您始终可以向上访问作用域。因此,在您的iframe代码中:
$(document).ready(function() {
function func1() {
alert("Function in iframe");
}
parent.iframeFunctions = {
test: func1
}
});
下一个问题是您需要能够访问该函数。您不能使用正常的jQuery文档就绪函数,因为当父页面的DOM准备好时,iframe尚未完成加载,因此您的iframeFunctions对象在父页面中仍然未定义。您需要这个:
$(window).load(function() {
iframeFunctions.test();
});
然而,您可以访问iframe的全局空间。哦对了,到目前为止这一切都假设iframe源在同一个域策略内。如果不是,涉及到更多的工作,在很多情况下甚至不值得去做。例如,jquery对象在全局空间中,因此以下是如何获取iframe的jquery:
$("iframe")[0].contentWindow.$("#divInIframe")
因此,如果您修改了iframe源的内容,使用函数表达式而不是函数声明:
var func1 = function() {
alert("Function in iframe");
}
$(document).ready(function() {
func1();
});
一旦窗口加载事件触发,您也可以从父级访问它:
$(window).load(function() {
$("iframe")[0].contentWindow.func1();
});
$(document).ready()
的块是一个匿名函数,因此从外部获取对它的引用将会很难,甚至不可能。你为什么不能将该函数移到$(document).ready()
块之外呢?这似乎会让你的生活变得更加轻松。 - Xavier Holt