我有两个html文件(Certificate1.html和Certificate2.html),它们都引用相同的JavaScript文件。 Certificate1.html调用一个JavaScript函数,该函数从html文件获取信息,打开一个新窗口,并将信息分配给第二个窗口,如下所示:
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 :(得分: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
像这样:
function placeName() {
var CertValues = window.opener.CertValues;
document.getElementById("sUserName").innerHTML = CertValues.FirstN + " " + CertValues.LastN;
document.getElementById("pCourseName").innerHTML = CertValues.CourseN;
document.getElementById("sHrs").innerHTML = CertValues.CourseHrs;
document.getElementById("sNum").innerHTML = CertValues.CourseNum;
}
(在上面,我已经使用了你的变量/属性命名约定,但要注意JavaScript中的压倒性约定是使用带有小写首字母的camelCase变量,保留CamelCase和构造函数的大写首字母[与JavaScript的Date
,RegExp
等一致)