在同一域上调用iframe中的函数,支持Internet Explorer

时间:2010-08-31 21:09:37

标签: javascript internet-explorer iframe

我在父页面上有一个触发javascript函数的事件,后者又调用了子iframe上的另一个函数。这两个页面都在同一个域中,我通过让javascript同时在两个页面中显示document.domain来验证这一点。

这是多年来一直有效的方法,并在类似主题中提出:     windows.frames [ “iframeID”] somefunction(); 停止使用Internet Explorer版本8.0.7600.16385 它适用于Internet Explorer版本8.0.6001.18702

我尝试用其中的每一个替换它,结果是一样的:     iframeName.somefunction();     document.frames( “iframeName”)somefunction();     top.frames [0] .somefunction();

给出的错误是“访问被拒绝”并引用somefunction()中的第一位代码,但是,如果在iframe内调用,somefunction()工作正常。

是否有新的“正确”方式从父级调用iframe中的函数?代码端是否有解决方法(我无法控制用户的浏览器)?

编辑:这是内部功能:     function somefunction(){     somebutton.click();     } 如果相反,我使用“alert('something');”,它可以正常工作。

EDIT2:较新的版本,以及IE9的Beta已经延长了这一点,也打败了hacky的解决方法,所以我又回到了水中。

编辑3:我已经忘记了这一点,直到有人发布了近一年之后。这是我最终的解决方法:

父调用iframename.badscripthack(); iframe中的子项具有以下功能: function badscripthack() {    的document.getElementById( “OffscreenTextField”)聚焦(); } 功能提交() {    的document.getElementById( “提交按钮”)点击()。 } 标签:

顾名思义,这是一个糟糕的黑客,但这是必要的。当然,它没有回答处理它的“正确”方式。它从那时起就起作用了,并且没有任何“背板”意外触发它(如果它们发生了,后果只是提前保存一个表格)。

1 个答案:

答案 0 :(得分:1)

家长Html

<html>
<head>
 <script type="text/javascript">
  function CallFrame()
  {
        var frame = document.getElementById("myframe");
    if(frame)
    {
           frame.contentWindow.Show();
        }
  } 
</script>
</head>
<body>
<h1> I am Parent </h1>
<input type="button" onclick="CallFrame()" value="Call Frame function" /><br/>
<iframe id="myframe" src="Frame.html" />
</body>
</html>

<强> Frame.Html

<html>
<head>
<script type="text/javascript">
function Show()
{
alert("Called");
}
</script>
</head>

<h1> I am IFrame</h1>
<input type="button" onclick="Show();" value="Call Own function">
</body>
</html>

在FireFox和IE8中测试