2

我想在 JavaScript 中打开一个新窗口,并从打开器窗口中显示一些数据。根据我读到的东西,我做了这个:

主窗口.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>

新窗口.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>


问题是这两个变量仍未定义。
我在这里先向您的帮助表示感谢。

4

4 回答 4

0

问题不在于您正在创建的变量,而是document.write在您在除初始渲染期间之外的任何时间调用它时都会清除窗口的内容,因此在您创建它们之后会清除您正在创建的变量。所以你不想在初始渲染后使用它。

如果您将document.write呼叫更改为 (say)document.getElementById('someid').innerHTML = ...;或使用document.createElement,您将获得更成功的结果。

这是您的页面,只是更改document.write为 using document.createElement,这使它们可以工作。

主窗口:Live Copy | 资源

<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>

弹出窗口: Live Copy | 资源

<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变量)中提取数据和/或通过查询字符串将数据传递给弹出窗口。

于 2013-05-10T13:19:02.663 回答
0

您的尝试实际上非常接近,但使用this.可能会导致问题。

在父窗口中,使用:

var newWindowVariable = 'Something';

在新窗口中,使用:

var myVariable = window.opener.newWindowVariable;

这可能是完成您想要做的事情的最简单方法。

于 2013-05-10T13:22:37.883 回答
0

使用本地存储。

 /* Page A */
  window.localStorage.setItem("NewWindowData ", "787878");

  /* Page B */
  var stringValue = window.localStorage.getItem("NewWindowData");

然后你可以转换成 int,或者你想转换成的任何东西。

于 2013-05-10T13:25:26.817 回答
0

如果要从父窗口中获取值,可以在弹出窗口中使用。

 window.opener.document.getElementById('idOfelement').value

例子

于 2013-05-10T13:41:56.307 回答