2009-01-22 164 views
4

我需要允許用戶單擊「page-1.htm」中的鏈接並打開一個彈出窗口。然後,當用戶在主瀏覽器窗口中瀏覽到「page-2.htm」時,我需要能夠引用彈出窗口。如何從兩個不同的頁面引用彈出窗口?

的JavaScript在 「頁-1.htm」

var playerWin = window.open("player.htm", "playerWin", "width=300,height=130"); 
playerWin.play("song.mp3"); // play() is a function in player.htm 

的JavaScript在 「頁2.htm」

playerWin.play("tune.mp3"); 

該代碼在頁2.htm生成錯誤「playerWin未定義」。這是可以理解的,因爲沒有名爲playerWin的變量已經在page-2.htm中定義。

我的問題是:我能夠從page-2.htm引用彈出窗口嗎?

+0

我正在使用ASP.NET,如果需要,我願意做一些時髦的服務器端解決方法。 – jessegavin 2009-01-22 23:01:47

回答

5

我剛做了一個快速測試,即使離開開啓者頁面後,彈出窗口仍然有'opener'對象,您可以訪問它。因此輪詢開啓者並重置參考,或者在離開頁面後等待並重新鏈接後添加一個計時器。

1.htm

<script> 
var w = window.open("p.htm", "playerWin", "width=300,height=130"); 
</script> 
<a href="2.htm">2</a> 

p.htm

<a href="javascript:opener.w=this;">re-link</a> 

2.htm

<script> 
    var w; 
</script> 
<a href="javascript:alert(w);">check</a> 
+0

是的窗口對象只是'清空'時,域名更改...這就是爲什麼它可能帶有價值左右window.name 2009-01-22 23:47:41

0

以前沒有見過......我假設你這樣做是因爲你必須也沒有選擇以不同的方式組織頁面。

由於您使用的是ASP.NET,只需將page-2設置爲一個會話值即可。然後讓您的播放器頁面運行一個AJAX計時器來檢查會話變量,然後執行相應的操作,因爲它在彈出窗口中有句柄。

2

答案是否定的。大多數瀏覽器會將窗口和文檔從一個導航欄完全隔離到另一個導航欄。沒有您可以將引用放置到彈出窗口的位置,當您導航到page2時,它將繼續存在。

1

你需要把頁面1.htm在iframe(即佔用完整的瀏覽器窗口)...然後通過頁面1的父窗口啓動並與彈出窗口進行通信。

即。 (對不起,僞代碼)

user clicks on link in page-1 
page-1 asks it's parent window to open a popup 
popup opens 

user navigates away (in the iframe) 
user clicks a link in page-2 
page-2 asks it's parent window to close it's popup 

只要一切都在同一個域,和導航停留在iframe中這應該工作

0

接受的答案並沒有在Firefox 12.0爲我工作。我目前正在開發一個項目,其中應用程序必須持久瞭解哪些彈出窗口在頁面之間導航或刷新當前頁面時打開/關閉。每當彈出窗口打開或關閉時,我都會使用JavaScript Cookie來在客戶端上存儲信息。不完美,但是如果你不需要百分之百安全的東西,這是一個不錯的選擇。在我看來,在重新加載頁面時嘗試維護JavaScript變量總是不太可靠,並且試圖在服務器上存儲有關彈出窗口的信息根本沒有意義,所以除了Cookie之外還剩下什麼?

相關問題