2013-04-30 118 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