从子javascript更改父级中的变量值

时间:2016-01-08 08:51:21

标签: javascript

我需要从子窗口更改父窗口的变量值

我这样做

parent.html

var check_var = false;
var myWindow = window.open("child.html", "", "width=auto, height=auto");
alert(check_var);// alerts false

child.html

window.opener.check_var=true=;

但它没有正常警告false是真的

请查看并建议任何方法

由于

1 个答案:

答案 0 :(得分:1)

window.open 启动打开窗口的过程,但是在加载页面时您的JavaScript代码会继续。因此,在加载子窗口之前以及在其中的代码修改变量之前,您的alert正在发生。

假设check_var是全局的,opener.check_var确实是您从child.html访问该变量的方式。这只是时间问题。

您可以在孩子加载时学习多种选择:

  1. 让孩子使用postMessage向家长发送讯息。

  2. 让孩子使用opener.someFunction()来调用父母中的全局函数。

  3. 使用myWindow.onload = function() { alert(check_var); };挂钩子窗口上的load事件,然后提醒值。如果child.html中的代码位于script块中而不等待某个事件,则会在load事件触发之前运行。

  4. 这是一个完整的工作示例:

    parent.html

    <!doctype html>
    <html>
    <head>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <meta charset="UTF-8">
    <title>Parent</title>
    </head>
    <body>
    <input type="button" id="the-button" value="Click to Open Child">
    <script>
    var check_var = false;
    document.getElementById("the-button").onclick = function() {
        var wnd = window.open("child.html");
        wnd.onload = function() {
            var p = document.createElement('p');
            p.innerHTML = "check_var = " + check_var;
            document.body.appendChild(p);
        };
    };
    </script>
    </body>
    </html>
    

    child.html

    <!doctype html>
    <html>
    <head>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <meta charset="UTF-8">
    <title>Child</title>
    </head>
    <body>
    <script>
    var p = document.createElement('p');
    if (opener) {
        opener.check_var = true;
        p.innerHTML = "Set check_var";
    } else {
        p.innerHTML = "No opener";
    }
    document.body.appendChild(p);
    </script>
    </body>
    </html>