2011-04-26 81 views
0

我主頁現有的窗口(稱爲「main.html中」),上面有一個鏈接,與我可以打開一個彈出式或集中彈出,如果已經存在:var test; if (test == null || test.closed) test = window.open('test.html','test','width=800,height=600,location=0'); else test.focus();使用在另一個選項卡

廠很好,但問題在於:如果用戶在瀏覽器中多次打開主頁面,請點擊主#1中的鏈接,然後單擊主#2中的鏈接,它使用現有的彈出窗口,但重新加載該站點,因爲他不知道彈出窗口已經打開。

有沒有辦法,我可以告訴其他主窗口彈出的句柄,讓他們可以使用它?

感謝您的諮詢。

+0

是的。瀏覽器爲了安全而阻止了一些功能,並且這是一種罕見的情況,用戶必須處理這種奇怪的行爲......;) – Vijay 2011-04-26 09:20:47

回答

0

如果兩個「主窗口」是相互獨立打開的,則他們無法訪問彼此的變量。

但是,您可以去窗口「測試」與window.open參考,然後檢查是否在「test.html中」設置一個變量的定義,以找出是否它已載入:

var test; 
if (!test || test.closed) { 
    test = window.open('','test','width=800,height=600,location=0'); 
    if (test && !test.someVariable) { 
    test.location.href = "test.html"; 
    } 
} else 
    test.focus(); 

順便說一句,請注意,我改變了支票在第一,如果從test == null!test,因爲變量將原本undefined,而不是null,使test == null將導致false

+0

謝謝,打開沒有url的窗口,只在頁面不顯示時設置url沒有裝滿工作。 – Wulf 2011-04-26 09:32:37

+0

一切都很好,但'test == null'會是'true' :) – Emmerman 2011-04-26 09:59:13

+0

@Emerder:對。我忘了使用'=='自動轉換wenn。我通常使用'==='。 – RoToRa 2011-04-26 10:05:56

0

這將需要您能夠訪問所有其他選項卡中的主窗口,以檢查它們中的任何一個是否已打開彈出窗口。據我所知,獲取對窗口的引用的唯一方法是從函數window.open返回的引用。

不允許javascript訪問其他窗口和選項卡,除了打開窗口/選項卡的窗口內部是由於安全性。想象一下,如果JavaScript可以通過所有的標籤並運行功能。這將是一個相當大的安全風險。

相關問題