如何使用window.open在Javascript中从子窗口返回值到父窗口?

8

我有一个父窗口,从中我使用window.open打开一个子窗口,如下所示。我希望根据子窗口返回的布尔值在父窗口中执行任务。

function openChildWin() 
{   
    var childWin = window.open("childWin.html", "_blank", "height=400, width=550, status=yes, toolbar=no, menubar=no, location=no,addressbar=no); 
    if (childWin)
    {
        //some logic
    }
    else
    {
        //some logic
    }
} 

**childWin.html**



 <!DOCTYPE html>
    <html lang="en">
      <head>

        <script type="text/javascript">

            function OKClicked()
            {
                //return true; //I want to return true here
                            window.close(); //Close this child window  
            }

        </script>

      </head>
      <body>
        <button type="button" id="OKButton" onclick="OKClicked()">Click ME</button>
      </body>
     </html>

当按钮被点击时,我希望从这里返回 true。但是这一切对我来说都不起作用。我在这里缺少语法吗?


你能试着使用 cookies 吗? - Amarnath R Shenoy
2
@AmarnathRShenoy - 这里使用Cookie有什么乐趣呢?我只是简单地需要从子窗口获取一个布尔变量,以便在父窗口上执行进一步的任务。 - user1556433
1
请查看 http://stackoverflow.com/questions/12419361/how-to-pass-value-to-previous-html-page - LCJ
3个回答

19

你可以像这样做:

在父节点中:

function openChildWin() {   
    var childWin = window.open("childWin.html", "_blank", "height=400, width=550, status=yes, toolbar=no, menubar=no, location=no,addressbar=no"); 
}
function setValue(val1) {
   // do your logic here
}

在弹出窗口中:

function OKClicked() {
    window.opener.setValue(true);
}

1
@Ashan shah - 这个不起作用。在window.open语句下面的语句会在子窗口打开后立即执行。 - user1556433
检查已修改。您可以使用设置值来实现您的逻辑。 - Ahsan Shah
@Ashan Shah - 是的,现在是这样的。我已经实现了这个功能。感谢你的回答。 - user1556433
有效解决方案 - Sritam Jagadev

2
使用以下代码,将test替换为您的元素ID。
var parentDoc = window.opener.document;
parentDoc.getElementById("test").value = document.getElementById("test").value;

你好Abhay,我尝试了你的代码,但它没有运行。我得到了这样的错误:无法读取null的属性(读取“document”) - Maximious

1
你可以使用 window.opener.postMessage()
在父级中:
window.onmessage = function(m) {

  if(m.data) {
    // logic if 'OK' in child clicked
  }

}

在子元素中:

function OKClicked() {
  window.opener.postMessage(true, '*');
  window.close(); 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接