Chrome:通过window.open传递JavaScript变量

时间:2013-04-30 13:23:37

标签: javascript google-chrome

我有两个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变量的方式与其他浏览器不同吗?发生了什么事?

谢谢, 克里斯汀

1 个答案:

答案 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的DateRegExp等一致)