2013-05-11 3 views
0

Здесь я пытаюсь использовать .data() для хранения данных объекта из функции window.open. Но он не работает, все, что я получаю, это undefined для переменной dataWin.Связанный объект window.open response с элементом html?

Мне интересно, как выполнить функцию, которая откроет новое окно, когда окно не открыто, иначе только .focus() в уже открытом окне, используя window.open. Потому что, когда я использую window.open по тому же имени окна, он вызывает обновление нового окна, что является проблемой для моего приложения.

Если есть способ хранения объекта в переменной, чтобы его можно было привязать к уникальному элементу html?
Я пытаюсь просто получить undefined

Или, есть способ проверить, открыто ли окно WINDOW NAME? (После поиска на Google не нашел ничего, что могло сделать это)

В любом случае, вот что я пытаюсь, без удачи:

function OpenNewWindow_Or_FocusOpenWindow(name) { 

dataWin = $("#id-" + name).data('winData') 

if (dataWin == 'undefined') { windowClosed = true } 
else { windowClosed = dataWin.closed } 


    if (windowClosed == true) { 
    newWin = window.open('myurl' , "win" + name , 'options'); 
    $("#id-" + name).data('winData',newWin); 
    if (newWin != null) { newWin.focus() } 
    } 
    else { 
    dataWin.focus(); 
    } 

} 

ответ

2

Вы используете dataWin, newWin и windowClosed как глобальные переменные , Обозначьте их локальную функцию. Кроме того, ваш чек для неопределенного неверен. Вот пересмотренный вариант кода, который будет делать то, что вы хотите:

function OpenNewWindow_Or_FocusOpenWindow(name) { 
    var el = $("#id-" + name), 
     dataWin = el.data('winData'), 
     windowClosed, 
     newWin; 

    windowClosed = (typeof dataWin === 'undefined') ? true : dataWin.closed; 

    if (windowClosed) { 
    newWin = window.open('myurl' , "win" + name); 
    el.data('winData',newWin); 

    if (newWin) { 
     newWin.focus() 
    } 
    } 
    else { 
    dataWin.focus(); 
    } 
} 

Убедитесь, что имя, которое вы передаете функции на самом деле имеет соответствующий DOM элемент с идентификатором «ид-NAME», или ваши данные никуда не исчезнут.

Обратите внимание:, например, в Google Chrome .focus() заблокирован для любых всплывающих окон. Таким образом, вы не сможете достичь желаемой функции там, используя простой вызов .focus().

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