2013-04-30 84 views
0

我有两个html文件(Certificate1.html和Certificate2.html),它们都引用相同的JavaScript文件。 Certificate1.html调用一个JavaScript函数,它从HTML文件中获取信息,打开一个新窗口,并分配信息到第二个窗口是这样的:Chrome:通过window.open传递JavaScript变量

function passName() { 
    var FirstN = document.frmUserName.inFirstN.value; 
    var LastN = document.frmUserName.inLastN.value; 
    var CourseN = $('.sCourse').text(); 
    var CourseHrs = $('.sNumHrs').text(); 
    var CourseNum = $('.sNum').text(); 

    var Cert = window.open("Certificate2.html"); 
    Cert.FirstN = FirstN; 
    Cert.LastN = LastN; 
    Cert.CourseN = CourseN; 
    Cert.CourseHrs = CourseHrs; 
    Cert.CourseNum = CourseNum; 

} 

Certificate2.html然后调用另一个函数,该设置将信息在正确的位置:

function placeName() { 
    document.getElementById("sUserName").innerHTML = FirstN + " " + LastN; 
    document.getElementById("pCourseName").innerHTML = CourseN; 
    document.getElementById("sHrs").innerHTML = CourseHrs; 
    document.getElementById("sNum").innerHTML = CourseNum; 
} 

现在,这一切都在Firefox和IE9完美的作品,但不是在Chrome中。当我在Chrome中运行它时,我没有发现任何明显的错误,但是当我检查F12时,有一个错误提示FirstN未定义。

Chrome是否处理JavaScript变量的方式与其他浏览器不同?这是怎么回事?

感谢, 克里斯汀

+0

这不是JavaScript变量不同,它是对'window'对象的处理 - 特别是通过'Cert'引用(这是“external”窗口对象)添加到窗口的属性是否显示在弹出窗口中的“窗口”对象上(这是“内部”窗口对象)。这也可能归因于同源策略生效时的差异(例如,您在打开文档之后立即访问窗口*,当文档尚未加载时; Chrome可能需要您等待'负载'事件首先,但这是猜测)。 – 2013-04-30 13:28:19

回答

0

,而不是使主窗口中尝试这些值推到弹出,我会建议有弹出从主窗口拉他们,因为A)我知道的作品,和B )我不确定拨打Cert立即拨打window.open后属性的时间问题。

所以在 “最小变动” 的模式,我会改变passName这样的:

function passName() { 
    var FirstN = document.frmUserName.inFirstN.value; 
    var LastN = document.frmUserName.inLastN.value; 
    var CourseN = $('.sCourse').text(); 
    var CourseHrs = $('.sNumHrs').text(); 
    var CourseNum = $('.sNum').text(); 

    window.CertValues = { 
     FirstN: FirstN, 
     LastN:  LastN, 
     CourseN: CourseN, 
     CourseHrs: CourseHrs, 
     CourseNum: CourseNum 
    }; 
    window.open("Certificate2.html"); 
} 

甚至:

function passName() { 
    window.CertValues = { 
     FirstN: document.frmUserName.inFirstN.value, 
     LastN:  document.frmUserName.inLastN.value, 
     CourseN: $('.sCourse').text(), 
     CourseHrs: $('.sNumHrs').text(), 
     CourseNum: $('.sNum').text() 
    }; 
    window.open("Certificate2.html"); 
} 

然后placeName这样的:

​​

(在上面,我用你的惯例变量/属性n但请注意,JavaScript中压倒性的惯例是使用带小写字母的camelCase作为变量,为构造函数保留CamelCase的首字母大写[符合JavaScript的Date,RegExp等)

+0

T.J.,嗯。当我这样做时,它停止在Firefox和IE中工作(并且仍然无法在Chrome中使用)。我的猜测可能是因为第一个html表单在点击提交按钮后被清除?我不知道如何避免这样做。 – kdormuth 2013-04-30 14:12:43

+0

另外,感谢关​​于命名约定的提示!我从现在开始肯定会遵循这一点。 – kdormuth 2013-04-30 14:13:00