我在父页面上有一个事件触发了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内调用函数?在代码方面是否有解决方法(我无法控制用户的浏览器)?
编辑:这是内部函数:
函数somefunction(){
somebutton.click();
}
相反,如果我使用“alert('something');”,它将正常工作。
EDIT2:较新的版本以及IE9的Beta版都对此进行了扩展,从而也克服了棘手的解决方法,因此,我回到水中了。
EDIT3:直到有人在一年后发布,我才忘记了这一点。这是我最终得到的解决方法:
父级调用iframename.badscripthack();
iframe中的子项具有以下功能:
函数badscripthack()
{
document.getElementById(“OffscreenTextField”)。focus();
}
函数submitthis()
{
document.getElementById(“SubmitButton”)。click();
}
和标签:
顾名思义,这是一个糟糕的技巧,但这是必要的。当然,它不能回答“正确”的处理方式。此后它一直有效,并且没有人“back-tabs”意外触发它(如果这样做的话,后果只是尽早保存表格)。
最佳答案
父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中测试
关于javascript - 在相同域的iframe中调用功能,支持Internet Explorer,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3613250/