从iframe访问父窗口的元素

Pap*_*ppa 66 javascript ajax iframe jquery

我有一个可以打电话的页面parent.php.在这个页面中,我有iframe一个提交表单,除此之外,我有一个id为"target"的div.是否可以在iframe中提交表单,并在成功时刷新目标div.说加载一个新的页面或什么?

编辑:目标div位于父页面中,所以我的问题基本上是你可以在iframe之外为父节点做一个jQuery调用.那看起来怎么样?

编辑2:这就是我的jquery代码现在的样子.它位于iframe页面中.div #target位于parent.php中

$(;"form[name=my_form]").submit(function(e){     
 e.preventDefault; 
 window.parent.document.getElementById('#target'); 
 $("#target").load("mypage.php", function() { 
 $('form[name=my_form]').submit(); 
 }); 
 })
Run Code Online (Sandbox Code Playgroud)

我不知道脚本是否处于活动状态,因为表单成功提交但目标没有任何反应.

编辑3:

现在我正在尝试从iframe中的链接调用父页面.那里也没有成功:

<a href="javascript:window.parent.getElementById('#target').load('mypage.php');">Link</a>
Run Code Online (Sandbox Code Playgroud)

bar*_*lay 112

我认为问题可能是你没有找到你的元素,因为你的调用中有"#"来获取它:

window.parent.document.getElementById('#target'); 
Run Code Online (Sandbox Code Playgroud)

如果您使用的是jquery,则只需要#.这应该是:

window.parent.document.getElementById('target'); 
Run Code Online (Sandbox Code Playgroud)

  • 如果网站容器和iframe位于不同的域上会怎样? (8认同)
  • @Michelem我认为你不走运;为了使您能够访问父级,iframe必须具有与父级相同的协议和域。这是防止跨域脚本编写的一种安全措施。 (2认同)
  • @Michelem:如果iframe和父级位于不同的域上,则与父级通信的唯一方法是使用window.postMessage()。不过,只有在您对两端都有控制权的情况下,才有可能。此处的文档:https://developer.mozilla.org/zh-CN/docs/Web/API/Window/postMessage (2认同)

Amr*_*Amr 12

您可以使用以下方式从iframe中访问父窗口的元素window.parent:

// using jquery    
window.parent.$("#element_id");
Run Code Online (Sandbox Code Playgroud)

这与以下相同:

// pure javascript
window.parent.document.getElementById("element_id");
Run Code Online (Sandbox Code Playgroud)

如果您有多个嵌套的iframe并且想要访问最顶层的iframe,那么您可以window.top像这样使用:

// using jquery
window.top.$("#element_id");
Run Code Online (Sandbox Code Playgroud)

这与以下相同:

// pure javascript
window.top.document.getElementById("element_id");
Run Code Online (Sandbox Code Playgroud)

  • 请注意,使用 jQuery 与使用“getElementById”*不*相同。对于新开发人员来说可能会感到困惑 (2认同)

Sha*_*oli 10

在iframe中有以下js并使用ajax提交表单.

$(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");
          });
       });

   });

});
Run Code Online (Sandbox Code Playgroud)


小智 5

我想你可以使用iframe中的window.parent.window.parent返回父页面的window对象,因此您可以执行以下操作:

window.parent.document.getElementById('yourdiv');
Run Code Online (Sandbox Code Playgroud)

然后用那个div做你想做的事.