2013-05-11 76 views
0

這裏我試圖用.data()來存儲來自window.open函數的對象數據。 但它似乎並沒有工作,我得到的是undefineddataWin變量。將window.open響應對象綁定到html元素?

我想知道如何完成一個功能,將打開一個窗口,當一個窗口未打開,否則只有.focus()在已打開的窗口上,使用window.open。因爲當我在相同的窗口名稱上使用window.open時,會導致刷新新窗口,這對我的應用程序來說是個問題。

如果有一種方法將對象存儲到變量中,以便它可以綁定到唯一的html元素?
我試試看,剛得到undefined

或者,有沒有辦法檢查一個窗口是否已被WINDOW NAME打開? (後搜索對谷歌沒有發現任何可以做到這一點)

反正這裏就是我想,沒有任何的運氣:

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

您使用dataWinnewWinwindowClosed爲全局變量。將它們擴展到本地功能。除此之外,你對未定義的檢查是錯誤的。這裏是你的代碼的修訂版本,它會做你想要什麼:

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(); 
    } 
} 

確保您傳遞給函數的名稱實際上與「ID-NAME」的ID對應的DOM元素,否則你的數據將無處可去。

請注意:例如在Google Chrome中,請注意:。對於任何彈出窗口,.focus()都會被阻止。因此,您無法通過簡單的調用.focus()來實現所需的功能。