我需要从子窗口更改父窗口的变量值
我这样做
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
是真的
请查看并建议任何方法
由于
答案 0 :(得分:1)
window.open
启动打开窗口的过程,但是在加载页面时您的JavaScript代码会继续。因此,在加载子窗口之前以及在其中的代码修改变量之前,您的alert
正在发生。
假设check_var
是全局的,opener.check_var
确实是您从child.html
访问该变量的方式。这只是时间问题。
您可以在孩子加载时学习多种选择:
让孩子使用postMessage
向家长发送讯息。
让孩子使用opener.someFunction()
来调用父母中的全局函数。
使用myWindow.onload = function() { alert(check_var); };
挂钩子窗口上的load
事件,然后提醒值。如果child.html
中的代码位于script
块中而不等待某个事件,则会在load
事件触发之前运行。
这是一个完整的工作示例:
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>