2010-03-05 112 views
10

JavaScript的window.opener屬性在各瀏覽器之間可靠可用,並且可以抵禦任何安全設置和任何類型的限制?開啓者和打開的窗口都在同一個域中。window.opener是否可靠?

有沒有人遇到麻煩,在某些情況下使用它的不好經歷?

我在問,因爲我打算建立一個依賴它的工具,並且應該支持儘可能多的平臺。

回答

5

我一直是一個開發人員在兩個網站上,現在廣泛使用window.opener,我不知道任何時候它失敗了我。這些應用程序在IE [678],Firefox和Webkit上進行了測試;我非正式地使用Opera並沒有注意到那裏有問題。

現在,「開門人」關係本來就是脆弱的,因爲沒有多少可以阻止用戶在用於打開單獨彈出窗口的主瀏覽器窗口中訪問「cnn.com」。一旦原始窗口加載了新內容,「子窗口」的「window.opener」引用不會對你有任何好處。同樣,當用戶離開並打開一個新的主瀏覽器窗口並導航到您的網站時,您的「孤兒」窗口將無法真正找到它。

當然,我不能100%保證一切都會好的:-)但是我的故事是真實的。也許我對「window.opener」的依賴並不像你計劃的那麼嚴重或深刻;我不能說我的應用程序中的所有內容都依賴於這個工作。

+0

乾杯@Pointy,符合我的財產經驗。這個連接絕對是脆弱的,但對我而言並不重要 - 我打算爲一個佔用全屏幕空間的所見即所得編輯器構建一個「媒體管理器」。 – 2010-03-05 20:12:57

1

我在我的應用程序中使用過window.opener,發現它很適合使用。它唯一的限制是,如果彈出窗口阻止程序被用戶激活,那麼新窗口不會打開導致問題的一些時間。

很好的替代品(如果彈出窗口攔截器是問題)是使用yui panelJQuery UI是一個不錯的選擇。

除此之外,我還沒有遇到任何問題,因此跨瀏覽器很好地工作。

+1

對於窗內彈出窗口+1。一個網站應該保持在它的範圍之內(用戶要求加載的窗口)但我個人認爲。 – Jeremy 2010-03-05 14:26:14

+0

@Anil @Jer我通常會同意你的看法,並使用窗口內彈出窗口,但這是一個特殊情況,外部窗口(或標籤)是絕對必要的。 – 2010-03-05 20:10:59

+0

@Pekka웃我知道這已經三年了,但爲了記錄,請記住,有些人(包括我自己)使用擴展名或瀏覽器屬性,例如「browser.link.open_newwindow = 1」,這使得網站完全無法使用打開一個新窗口。 (通過強制他們瀏覽當前標籤而不是打開新標籤) – ssokolow 2013-09-11 17:39:24

5

值得注意的是,如果文件沒有通過Chrome中的HTTP連接加載,window.opener不起作用(儘管它在Safari中工作正常)。

+0

+1非常有趣!你知道這個參考鏈接嗎? – 2010-11-17 22:12:24

+1

不,這是我通過使用它發現的那些東西之一。我希望有這樣的資源,但瀏覽器與瀏覽器之間的這些差異似乎很大程度上沒有記錄。 – Heilemann 2010-11-19 15:52:29