如何访问iframe的$(document).ready(function(){})中包含的函数?

所以我有一个iframe,它有一些函数包含在这样的$(document).ready(function(){})中。

 $(document).ready(function(){ function foo(){ // do some stuff } });  

我知道我可以用$(’iframe’)。contents()。find(’something’)之类的东西访问DOM,但是我可以从上面访问foo()函数吗?

您无法访问iframe的ready函数中的变量,原因与您无法访问任何其他函数的局部变量相同(您无法在范围内“向下”)。 但是,如果您可以修改iframe中的代码,则可以随时进入范围。 所以在你的iframe代码中:

 $(document).ready(function() { function func1() { alert("Function in iframe"); } parent.iframeFunctions = { test: func1 } }); 

下一个问题是您需要能够访问该function。 您无法使用正常的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(); }); 

你不能。 foo是一个局部变量,无法从其他任何地方看到(想象一下,如果你可以从其范围之外访问像i和其他局部变量这样的索引变量!)。

如果您可以更改iframe中的代码:

1)你可以把foo变成全球性的。

 $(document).ready(function(){ foo = function(){ //this alternate syntax declares a global function foo //it is very evil so be sure you really need this ... }; }) 

或者如果foo不使用任何内部变量,它可能已在外部声明

第一名…

 function foo(){ ... }; $(document).ready(function(){ }) 

2)你可以将foo作为参数传递给需要它的人(就像你必须与任何其他局部变量一样)

 $(document).ready(function(){ function foo(){ //this alternate syntax declares a global function foo //it is very evil so be sure you really need this ... }; function_that_uses_foo(); }) function_that_uses_foo(){ foo(); //foo is not on cope, this doesnt work! } 

 $(document).ready(function(){ function foo(){ //this alternate syntax declares a global function foo //it is very evil so be sure you really need this ... }; function_that_uses_foo(foo); }) function_that_uses_foo(his_foo){ his_foo(); } 

如果您无法更改iframe,那么您将需要复制粘贴function代码,如果它甚至可以暂停。