2013-04-25 49 views
2

这是我第一次尝试JavaScript,所以如果事情有点纠结,我很抱歉。在新窗口中访问JavaScript变量

我有两个html页面(Certificate1.html和Certificate2.html)。我想要做的是提示用户在Certificate1.html上的姓名,然后将该信息传递给Certificate2.html。此时,用户的姓名将显示在他可以打印的证书中。

这两个html页面引用相同的JavaScript文件(Certificate1.js)。第一页调用passName():

function passName() { 
    FirstN = document.frmUserName.inFirstN.value; 
    LastN = document.frmUserName.inLastN.value; 
    // alert(FirstN); // good 
    // alert(LastN); // good 
    var Cert = window.open("Certificate2.html"); 
    Cert.FirstN = FirstN; 
    Cert.LastN = LastN; 
    //alert(Cert.FirstN); //good 
    //alert(Cert.LastN); //good 
} 

这似乎工作正常。我被卡住的地方是Certificate2.html调用的函数placeName()。我已经开始使用Load,并且我知道它正确地访问了这个函数(我只是在里面挂了一个警报,然后它就出现了)。我不知道如何访问我在passName()中传递给Cert的FirstN和LastN变量。我试过document.FirstN,但我得到“未定义”。我如何访问我(我想)通过的FirstN和LastN变量?

谢谢! -Kristin

UPDATE:

明白了!

我不需要通过window.opener访问它 - 我已经将变量传递给窗口,所以我可以直接访问它们。

function placeName() { 
    //alert(FirstN); 
    document.getElementById("pUserName").innerHTML = FirstN + " " + LastN; 
} 

谢谢你们! -Kristin

回答

2

在新窗口中使用window.opener对象。

window.opener.FirstN 

W3Schools Examples

Can I pass a JavaScript variable to another browser window?

与我的设置以下工作:

first.html

<html> 
<script> 
    var Var1 = "MyStringVar"; 
    var Var2 = 123; 
    var win = window.open("second.html"); 
</script> 
</html> 

second.html

<html> 
<script> 
    alert(window.opener.Var1); 
    alert(window.opener.Var2); 
</script> 
</html> 
+0

感谢您的回复!我可以将其放置在单独的JavaScript文件中,还是需要将其放入Certificate2.html中? – kdormuth 2013-04-25 12:54:09

+0

这将被放入Certificat2.html java代码。 – StuckAtWork 2013-04-25 12:58:35

+0

这假定源窗口保持打开并可用。 – StuckAtWork 2013-04-25 13:01:22

3

HTML的localStorage(HTML5) http://diveintohtml5.info/storage.html

在第一个文件

localStorage.setItem("FirstN", document.frmUserName.inFirstN.value); 
在第二个

var FirstN = localStorage.getItem("FirstN"); 

或者干脆设置Cookie ...

http://www.w3schools.com/js/js_cookies.asp

但我认为这应该使用PHP来完成,或者至少不是JS

+0

嗨,我真的不喜欢使用PHP(因为我完全不熟悉它),我们并不需要将信息保存在任何地方。一旦用户获得Certificate2.html,他们可以打印它,但他们的名字不存储或任何东西。如果他们想要打印另一个,他们需要再次输入他们的信息。 – kdormuth 2013-04-25 13:11:08

+0

如果你不想坚持数据,PHP确实不是那么必要。 – Oliboy50 2013-04-25 13:15:54

+0

我没有看到你使用'window.open'来打开第二页。所以也许StuckAtWork的答案对你更好。 – Oliboy50 2013-04-25 13:23:27

0

UPDATE:

明白了!

我不需要通过window.opener访问它 - 我已经将变量传递给窗口,所以我可以直接访问它们。

function placeName() { 
    //alert(FirstN); 
    document.getElementById("pUserName").innerHTML = FirstN + " " + LastN; 
} 

谢谢你们! -Kristin

0

在第一窗口文件:

window.yourVariable =值;

在第二个窗口中的文件:

window.opener.yourVariable

能解密:申报yourVariable全球和其绑定到父窗口。 如果从父窗口打开新窗口,则可以从'window.opener'访问数据。由于yourVariable被声明为全局的,父窗口的值可以通过使用'window.opener.yourVariable'来访问子窗口