Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用不同窗口中的变量_Javascript - Fatal编程技术网

Javascript 使用不同窗口中的变量

Javascript 使用不同窗口中的变量,javascript,Javascript,我想用JavaScript打开一个新窗口,并显示来自opener窗口的一些数据。根据我读到的一些东西,我做了如下: MainWindow.html <html> <head> <script> function OpenNewWindow() { this.MainWindowData = 123123; document.write(this.MainWindowData); var wnd = window.open("NewW

我想用JavaScript打开一个新窗口,并显示来自opener窗口的一些数据。根据我读到的一些东西,我做了如下:

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>

函数OpenNewWindow()
{
this.MainWindowData=123123;
document.write(this.MainWindowData);
var wnd=window.open(“NewWindow.html”);
wnd.NewWindowData=787878;
}
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>

函数ShowData()
{
document.write(“NewWindowData:+this.NewWindowData+”
); document.write(“MainWindowData:+window.opener.MainWindowData”); }

问题是两个变量都没有定义。

提前感谢您的帮助。

问题不在于您正在创建的变量,而在于
文档。write
在您调用窗口时会清除窗口的内容,初始渲染期间除外,因此在创建变量后会清除您正在创建的变量。因此,您不希望在初始渲染后使用它

如果更改
文档,则编写
调用(比如)document.getElementById('someid').innerHTML=
或使用
document.createElement
,您将获得更成功的结果

这是您的页面,只需更改
文档。使用
文档编写
。createElement
,即可使其正常工作

主窗口:|


函数OpenNewWindow()
{
this.MainWindowData=123123;
var wnd=窗口打开(“http://jsbin.com/uvocos/1");
wnd.NewWindowData=787878;
}
弹出窗口:|


函数ShowData()
{
显示(“NewWindowData:+this.NewWindowData”);
显示(“MainWindowData:+window.opener.MainWindowData”);
}
功能显示(msg){
var p=document.createElement('p');
p、 innerHTML=字符串(msg);
document.body.appendChild(p)
}
createElement
位于我添加到弹出窗口的
display
功能中

另外:我可能会使用
window
而不是
this
来创建变量
这个
实际上将是调用函数的方式,因此它是有效的,但是在不起作用的地方还有其他方法调用函数,并且使用
window.foo=


最后:我不确定您在打开弹出窗口后立即在弹出窗口中添加变量(您的
NewWindowData
)是否能可靠地工作,尽管在上面(对我来说)是这样的。通常情况下,我让弹出窗口从开启器(您的
MainWindowData
变量)中提取数据,并/或通过查询字符串将数据传递给弹出窗口。

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

在父窗口中,使用:

var newWindowVariable = 'Something';
var myVariable = window.opener.newWindowVariable;
在新窗口中,使用:

var newWindowVariable = 'Something';
var myVariable = window.opener.newWindowVariable;
这可能是完成您要做的事情的最简单方法。

使用本地存储

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

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

然后,您可以将其转换为int或任何您想将其转换为的值。

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

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


你不能使用querystring参数吗?你试过使用top.opener还是关闭了“window”(在opener之前)?@Fred:我不想做任何事情,只是试过这个。我想这也不错,但我只是好奇为什么这不管用。@ViniciusLima:我不知道你是怎么想的mean@ViniciusLima:由于
opener
是一个全局变量,因此它是全局对象(
window
)的一个属性。因此,除非有另一个变量对其进行跟踪,
opener
window.opener
是同一件事。它根本与初始值无关question@LittleSweetSeas:是的。事实上,这是问题的症结所在:OP的代码正在清除窗口及其上的变量。请看我发布的更正示例。我改变的只是信息的输出方式,从
document.write
切换到DOM方法。瞧,这些变量很好。我同意@T.J.克劳德的观点。我唯一能让它工作的方法就是用
console.log
更改
document.write
。没有其他更改。如果我只更改了它,它仍然会向console@KocsisDávid:您根本没有在引用的代码中向控制台写入代码。同样,上述方法有效。尝试单击主窗口,单击“打开窗口”按钮,然后单击结果窗口中的“显示数据”按钮。您可以看到这两个变量(在Chrome、Firefox和IE上)。只是为了好玩,我用IE6启动了一个虚拟机,甚至可以在那里工作。非常依赖浏览器,在IE7中不起作用,因为IE7仍然是市场的一大部分。不是IE7,而是IE9和IE10。IE7正在慢慢失去市场份额,但这是一个缓慢的过程。IE一直是jQuery、javascript兼容性和标准中的红发继子。理论上,IE也应该在IE8中工作。微软花了一段时间才接受并遵循标准,但IE10是朝着正确方向迈出的一大步。同意。我无法告诉你有多少次我在Firefox和Chrome中使用了一些东西,但却在IE中被破坏了。没有理由为此使用本地存储。以OP is的方式在页面之间共享变量有很多实用程序,并且是普遍兼容的。问题在于
文档。编写
,而不是变量。使用
this
调用函数的方式很好。但我同意这不太理想。你能把这两个文件全部编出来吗?因为出于某种原因,它不想工作是的,它应该。您已经使用Id获取了任何元素的值