首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何访问封装在iframe的$(.ready)函数(.ready(){})中的函数?

如何访问封装在iframe的$(.ready)函数(.ready(){})中的函数?
EN

Stack Overflow用户
提问于 2011-10-06 05:26:38
回答 2查看 2.4K关注 0票数 5

所以我有一个iframe,它有一些包装在$(.ready)函数(.ready(){})中的函数,如下所示。

代码语言:javascript
运行
复制
<script>
    $(document).ready(function(){
        function foo(){
            // do some stuff
        }
    });
</script>

我知道我可以用$('iframe').contents().find(' something ')来访问DOM,但是我能从上面访问foo()函数吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-06 06:05:28

您不能访问iframe的该就绪函数中的变量,原因与您不能访问任何其他函数的局部变量的原因相同(您不能在作用域中“向下”)。但是,如果您可以修改iframe中的代码,那么您始终可以扩大范围。所以在你的iframe代码中:

代码语言:javascript
运行
复制
$(document).ready(function() {
    function func1() {
        alert("Function in iframe");
    }

    parent.iframeFunctions = {
        test: func1
    }
});

下一个问题是您需要能够访问该函数。您不能使用普通的jquery文档,因为当父页面的DOM准备就绪时,iframe尚未加载完毕,因此您的iframeFunctions对象在父页面中仍未定义。你需要这样做:

代码语言:javascript
运行
复制
$(window).load(function() {
    iframeFunctions.test();
});

但是,您可以访问iframe的全局空间。哦,是的,到目前为止,所有这些都是假设iframe源属于相同的域策略。如果不是,就会涉及到更多的工作,在很多情况下甚至都不值得。例如,jquery对象位于全局空间中,下面是如何获取iframe的jquery的方法:

代码语言:javascript
运行
复制
$("iframe")[0].contentWindow.$("#divInIframe")

因此,如果您将iframe源文件的内容修改为使用函数表达式而不是函数声明:

代码语言:javascript
运行
复制
var func1 = function() {
    alert("Function in iframe");
}

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

您也可以从父窗口访问它(在窗口加载事件被激发之后):

代码语言:javascript
运行
复制
$(window).load(function() {
    $("iframe")[0].contentWindow.func1();
});
票数 4
EN

Stack Overflow用户

发布于 2011-10-06 05:30:03

您不能这样做。foo是一个局部变量,从其他任何地方都看不到它(想象一下,如果您可以从i这样的索引变量和其他局部变量的作用域之外访问它们!)。

如果可以更改iframe中的代码,请执行

1)您可以将foo全局。

代码语言:javascript
运行
复制
$(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不使用任何内部变量,则可以在

第一名。

代码语言:javascript
运行
复制
function foo(){
    ...
};

$(document).ready(function(){

})

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

代码语言:javascript
运行
复制
$(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!
}

变成了

代码语言:javascript
运行
复制
$(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的,那么你需要复制粘贴函数代码,如果这会停止的话。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7667955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档