2013-04-30 2 views
0

У меня есть два html-файла (Certificate1.html и Certificate2.html), которые ссылаются на один и тот же файл JavaScript. Certificate1.html вызывает одну функцию JavaScript, которая принимает информацию из HTML-файла, открывает новое окно, и присваивает информацию второго окна, как это:Chrome: передать переменную JavaScript через window.open

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, отличные от других браузеров? Что происходит?

Спасибо, Kristin

+0

Это не переменные JavaScript, которые отличаются друг от друга, это обработка объекта 'window' - и, в частности, появляются ли свойства, которые вы добавляете в окно через вашу ссылку« Cert »(которая относится к« внешнему »объекту окна) на объекте 'window' во всплывающем окне (который является« внутренним »объектом окна). Это также может быть связано с различиями в том, когда действует одна и та же исходная политика (например, вы сразу открываете окно * сразу после ее открытия, когда документ еще не загружен, вам может потребоваться Chrome, чтобы сначала «load», но это спекуляция). –

ответ

0

Вместо того, чтобы иметь главное окно попытаться раздвинуть эти значения на всплывающее окно, я рекомендовал бы всплывающий вытащить их из главного окна, потому что А) Я знаю, что работает, и 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; 
} 

(В приведенном выше примере я использовал ваше соглашение для переменной/свойства n но следует помнить, что подавляющее соглашение в JavaScript заключается в использовании camelCase с младшей начальной буквой для переменных, резервируя CamelCase с начальной буквой для функций конструктора [в соответствии с 10,и т. д.)

+0

T.J., Hmmm. Когда я это делаю, он перестает работать в Firefox и IE (и все еще не работает в Chrome). Мое предположение, возможно, потому, что первая форма html очищается после нажатия кнопки отправки? Я не знаю, как это сделать. – kdormuth

+0

Кроме того, спасибо за отзыв об именовании! С этого момента я обязательно буду следовать этому. – kdormuth

Смежные вопросы