如何使用window.open从父窗口传递参数到子窗口

时间:2014-03-12 05:30:27

标签: javascript

如何使用window.open从Java Script中的父窗口向子窗口传递参数。

请给我任何想法。

5 个答案:

答案 0 :(得分:1)

您可以使用查询字符串来传递参数,这是一种更好的方法。

关于使用 window.open 传递参数的要求。您可以访问某些元素和全局变量,但不能保留值。例如:当您执行以下代码时

popupWindow = window.open(url,'popUpWindow','height=500,width=500'); 
popupWindow.alert("test");

打开新窗口时会看到警告。但是数据将仅在该警报之后加载。因此,即使您能够在子javascript中设置任何全局变量的值,但由于页面在窗口打开后加载,因此无法保留该值,因此数据将被刷新。

答案 1 :(得分:0)

为子窗口创建html时,在html中创建一个隐藏字段并进入子窗口。

答案 2 :(得分:0)

什么样的参数?我的意思是,参数是什么? 例如,您可以在网址中添加GET值:

window.open("http://example.com/script.php?KEY=value")

然后你会在你的(用PHP)中获得$ _GET [' KEY']这个'值'

答案 3 :(得分:0)

将值作为查询字符串传递

尝试下载

window.open("url.php?param=value&param2=value2");

答案 4 :(得分:0)

我最初尝试过这个:

父窗口:

 var parms = {arg1: "arg1", arg2:"arg2"};
 var handle = window.open(url);
 // stringifyed to make sure the child window does 
 //not try to access object by reference from child to parent.
 handle.window.parameters = JSON.stringify(parms);

子窗口:

$(document).ready(function(){
    var args = JSON.parse( window.parameters);
    // and so on.
});

问题是在子窗口准备好之前偶尔会设置该值,所以当子窗口准备就绪时,它将是未定义的。

所以相反,我使用了sessionStorage(注意:这不适用于跨域。)

家长:

// the user can cause more than one child window so I give storage a unique id.
var parms = JSON.stringify({arg1: "arg1", arg2:"arg2"});
var storageId = "parms" + String(Date.now());
sessionStorage.setItem(storageId, parms);
window.open(url + "?sid=" + storageId);

关于孩子:

$(document).ready(function(){
    var prmstr = window.location.search.split("=");
    var sid = prmstr[1];
    var args = JSON.parse(sessionStorage.getItem(sid));
    sessionStorage.removeItem(sid);
    // and so on
});