我想在JavaScript中打开一个新窗口,并在开启窗口中显示一些数据。根据我读到的内容,我做了这个:
MainWindow.html
<html>
<head>
<script>
function OpenNewWindow()
{
this.MainWindowData = 123123;
document.write(this.MainWindowData);
var wnd = window.open("NewWindow.html");
wnd.NewWindowData = 787878;
}
</script>
</head>
<body>
<input type="button" value="Open Window" onclick="OpenNewWindow()">
</body>
</html>
NewWindow.html:
<html>
<head>
<script>
function ShowData()
{
document.write("NewWindowData: " + this.NewWindowData + "<br />");
document.write("MainWindowData: " + window.opener.MainWindowData);
}
</script>
</head>
<body>
<input type="button" value="Show Data" onclick="ShowData()">
</body>
</html>
问题是这两个变量都是未定义的
感谢您的帮助。
答案 0 :(得分:0)
问题不在于你正在创建的变量,而是document.write
在你初次渲染时除了初始渲染之外的任何时候都会消除窗口的内容,因此会消除你在创建后创建的变量创造它们。因此,您不希望在初始渲染后使用它。
如果您将document.write
来电更改为(比方说)document.getElementById('someid').innerHTML = ...;
或使用document.createElement
,您将获得更多成功结果。
以下是您的网页,只是将document.write
更改为使用document.createElement
,这使它们有效。
<html>
<head>
<script>
function OpenNewWindow()
{
this.MainWindowData = 123123;
var wnd = window.open("http://jsbin.com/uvocos/1");
wnd.NewWindowData = 787878;
}
</script>
</head>
<body>
<input type="button" value="Open Window" onclick="OpenNewWindow()">
</body>
</html>
<html>
<head>
<script>
function ShowData()
{
display("NewWindowData: " + this.NewWindowData);
display("MainWindowData: " + window.opener.MainWindowData);
}
function display(msg) {
var p = document.createElement('p');
p.innerHTML = String(msg);
document.body.appendChild(p)
}
</script>
</head>
<body>
<input type="button" value="Show Data" onclick="ShowData()">
</body>
</html>
createElement
位于我添加到弹出窗口的display
函数中。
另外:我可能会使用window
而不是this
来创建变量。 this
实际上 window
就像你调用你的函数一样,所以它有效,但还有其他方法可以调用函数,它不起作用,并使用window.foo = ...;
会。
最后:我不确定你打开弹出窗口后立即(你的NewWindowData
)可以正常工作,虽然它在上面做了(对我而言) )。通常而不是那样,我让弹出窗口从开启者(你的MainWindowData
变量)中提取数据和/或通过查询字符串将数据传递给弹出窗口。
答案 1 :(得分:0)
您的尝试实际上非常接近,但使用this.
可能会导致问题。
在父窗口中,使用:
var newWindowVariable = 'Something';
在新窗口中,使用:
var myVariable = window.opener.newWindowVariable;
这可能是完成您要做的事情的最简单方法。
答案 2 :(得分:0)
使用LocalStorage。
/* Page A */
window.localStorage.setItem("NewWindowData ", "787878");
/* Page B */
var stringValue = window.localStorage.getItem("NewWindowData");
然后你可以转换成int,或者你想要把它转换成什么。
答案 3 :(得分:0)