0

同じ JavaScript ファイルを参照する 2 つの html ファイル (Certificate1.html と Certificate2.html) があります。Certificate1.html は、html ファイルから情報を取得する 1 つの JavaScript 関数を呼び出し、新しいウィンドウを開き、次のように 2 番目のウィンドウに情報を割り当てます。

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 の圧倒的な規則は、変数の頭文字を小文字にしてキャメルケースを使用し、コンストラクター関数の頭文字を大文字にするキャメルケースを予約することであることに注意してください。 [JavaScript のDateRegExpなどに沿って)

于 2013-04-30T13:31:50.847 に答える