Javascript:从iframe调用父项中的函数

时间:2011-08-24 23:09:37

标签: javascript function iframe parent

Hello StackOverflow社区,

我的<iframe>和JavaScript出现问题。假设我的body.html中有一个iframe的index.html。在index.html <head>标记中我有这个内容:

<script type="text/javascript">
    function alertTest() {
        alert("Testing");
    }
</script>

在iframe中src="iframe.htm"(该位置与index.html属于同一个域)。在iframe.htm页面中,我有:

<a href="javascript:void(0);" onclick="window.parent.alertTest();">Click here.</a>

问题是它没有加载提醒,并且在谷歌浏览器中返回错误:

  

“未捕获的TypeError:对象[对象DOMWindow]的属性'alertTest'不是函数

我尝试了window.parent.alertTest();window.top.alertTest();top.alertTest();parent.alertTest();以及我搜索过的类似问题的几乎所有内容。

您似乎无法从位于所述非iframe内的iframe调用位于非iframe中的函数。

请帮忙!

P.S。基本上在实际的最终结果中我试图调用一个Lightbox打开图像功能(使用slimbox因为我能够用javascript而不是从href调用open image函数)。我还使用target =“_ parent”属性尝试了这个最终结果。

3 个答案:

答案 0 :(得分:12)

尝试像这样定义你的函数:

window.alertTest = function () {
  alert("Testing");
};

...并以与问题相同的方式调用它; - )

在浏览器中,javascript中的所有内容都是window对象的子代。当您以function funcName() { ... }形式定义函数时,您正在有效地定义window对象的私有方法。这在正常情况下无关紧要,因为所有代码都在window的范围内执行,因此它可以访问这些私有方法。

但是当您尝试从外部访问window对象时(即另一个window对象,您的iframe对象),您将无法访问它。如果您以window.funcName = function () { ... };形式定义函数,那么您正在创建一个特权方法,该方法可以从外部访问,但也可以访问私有方法和属性(即脚本中的变量),因此它将在你试着从你的iframe中调用它。

Read this如果您想了解更多有关私人/特权成员及其可访问性的信息。

答案 1 :(得分:9)

使用parent.functionName。看看这个link

答案 2 :(得分:1)

像这样编写你的函数:

alertTest = function(){

  alert("Testing")

}

然后从iframe调用它:

parent.alertTest();