0

我有两个引用同一个 JavaScript 文件的 html 文件(Certificate1.html 和 Certificate2.html)。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 变量的方式是否与其他浏览器不同?这是怎么回事?

谢谢,克里斯汀

4

1 回答 1

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等)

于 2013-04-30T13:31:50.847 回答