Access elements of parent window from iframe
我有一个页面可以调用parent.php。 在此页面中,我有一个带有提交表单的iframe,除此之外,我还有一个ID为" target"的div。 是否可以在iframe中提交表单,并在成功刷新后刷新目标div。 是说要在其中加载新页面?
编辑:
目标div位于父页面中,因此我的问题基本上是,是否可以在iframe之外向父对象进行jQuery调用的示例。 看起来如何?
编辑2:
这就是我的jquery代码现在的样子。 它位于iframe页面的中。 div #target在parent.php中
1 2 3 4 5 6 7
| $(;"form[name=my_form]").submit(function(e){
e.preventDefault;
window.parent.document.getElementById('#target');
$("#target").load("mypage.php", function() {
$('form[name=my_form]').submit();
});
}) |
我不知道该脚本是否处于活动状态,导致表单成功提交,但目标没有任何改变。
编辑3:
现在,我尝试通过iframe中的链接调用父页面。 那里也没有成功:
-
目标div是在父页面还是iframe中?
-
它在父页面中,所以我的问题基本上是,是否可以在iframe之外向父对象进行jquery调用示例。
我认为问题可能是由于调用中获取"#"而找不到元素:
1
| window.parent.document.getElementById('#target'); |
仅在使用jquery时才需要#。 在这里应该是:
1
| window.parent.document.getElementById('target'); |
-
如果网站容器和iframe位于不同的域上怎么办?
-
@Michelem我想你很走运;为了使您能够访问父级,iframe必须具有与父级相同的协议和域。那是防止跨域脚本编写的一种安全措施。
-
@Michelem:如果iframe和父级位于不同的域上,则与父级通信的唯一方法是使用window.postMessage()。不过,只有在您可以控制两端的情况下,这才有可能。此处的文档:developer.mozilla.org/zh-CN/docs/Web/API/Window/postMessage
-
@michelem有没有示例如何在iframe中访问父元素?我们可以使用window.postMessage()进行操作,但是我们要访问什么并在iframe中使用它呢?
您可以使用window.parent在iframe中访问父窗口的元素,如下所示:
1 2
| // using jquery
window.parent.$("#element_id"); |
与以下内容相同:
1 2
| // pure javascript
window.parent.document.getElementById("element_id"); |
如果您有多个嵌套的iframe,并且要访问最顶层的iframe,则可以使用window.top,如下所示:
1 2
| // using jquery
window.top.$("#element_id"); |
与以下内容相同:
1 2
| // pure javascript
window.top.document.getElementById("element_id"); |
-
请注意,使用jQuery与使用getElementById是不同的。可能会使新开发人员感到困惑?
在iframe中包含以下js,并使用ajax提交表单。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| $(function(){
$("form").submit(e){
e.preventDefault();
//Use ajax to submit the form
$.ajax({
url: this.action,
data: $(this).serialize(),
success: function(){
window.parent.$("#target").load("urlOfThePageToLoad");
});
});
});
}); |
-
它可以通过ajax提交表单,但是目标div从一开始就保持不变。从iframe中与parent.php通信似乎确实可行。
-
如果iframe在同一个域中,那么您将没有任何问题。您可以尝试在成功处理程序中向window.parent.$("#target").length发出警报吗?
-
iframe位于同一域中。好吧,我把那个代码放在了window.parent。$("#target")。load(" urlOfThePageToLoad");中。但它什么也没返回。它在您的代码中表示"表单"的地方,应该是表单的名称吗?可以吗?
-
表格的名称是什么?放置为form[name=nameOfYourform]代替form
-
您想在修改后的问题中做什么?
我认为您可以只使用iframe中的window.parent。 window.parent返回父页面的window对象,因此您可以执行以下操作:
1
| window.parent.document.getElementById('yourdiv'); |
然后对该div执行任何操作。
-
我是一名jQuery新手,但我应该在ifram文件中放入类似内容吗?
-
$(document).ready(function(){window.parent.document.getElementById(#target); $("#target")。load(" file.php");});
-
大概更像是:$(document).ready(function(){$(window.parent.document.getElementById(" target"))。load(" fil e.php")); });
-
恐怕这没有用。表单提交得很好,但目标div没有任何反应。它保持原样。嗯..
-
可能需要阻止表单提交,直到要从iframe运行的javascript完成提交为止。因此,它类似于(抱歉,如果下面的代码中有错误,将其写在这样的代码块中很痛苦):$(;" form")。submit(function(e){e.preventDefault; window .parent.document.getElementById(#target); $("#target")。load(" file.php",function(){$(form).submit();});})
-
检查我的第一篇文章,这是您的意思吗?