簡體   English   中英

彈出窗口處於活動狀態時,在啟動時自動加載頁面

[英]Auto-loading page on start up into pop-up window when pop-up window is active

抱歉,想出一個標題。

問題是這樣的:由於現代的網絡瀏覽器會禁用彈出窗口,因此我需要一種解決方法。

訪客進入網站時,會提示他們按下一個按鈕。 按下按鈕后,將彈出一個帶有以下代碼的窗口:

w = window.open('/audio/audioplayer.php?id='+audioId, 'audioplayer', params);

既然彈出窗口是打開的,我希望當訪問者查看其他頁面時,彈出窗口會根據他們所在的頁面加載特定信息。

我不確定這是否可行或我該怎么做(檢查彈出窗口是否打開,是否正在加載信息,以及是否未重新顯示按鈕)

我認為不可能檢測到彈出窗口未打開的位置。

您是否考慮過使用對話框? 而不是彈出窗口?

window.open返回windowObjectReference-這是您可以與彈出窗口對話的唯一方法。 特別是,您可以使用windowObjectReference.closed屬性判斷該窗口是否關閉。 彈出窗口具有一個window.opener屬性,該屬性引用了父窗口。 您可以使用兩者進行交流。

但是,您似乎希望在頁面加載之間保持這種通信。 您有幾種選擇:

  • 盡量保持窗口之間的鏈接盡可能長。 問題在於,當父窗口重新加載時,所有javascript變量都會重置,並且無法恢復對彈出窗口的引用-除非彈出窗口使用window.opener對其進行設置。 此鏈接顯示了這種方法,還有一個帶有框架的方法。
    您可能會認為它很丑或很聰明。 但這並不完美。 (如果用戶在新鏈接中打開頁面,則無法執行任何操作)
  • 在主頁和彈出頁面中都使用ajax與服務器進行通信。 當頂層頁面想要將消息發送到彈出窗口時,它們會啟動XMLHttpRequest到您的服務器,該服務器通知一個腳本,該腳本將消息保留在“隊列”中。 彈出頁面也定期使用XHR輪詢/長期輪詢服務器(或服務器發送的事件 ,我個人最喜歡),並相應地更新其自身的內容。
    這可能比您想要的更復雜/更昂貴,但這也是最安全的解決方案。
  • 不要像其他建議的那樣使用彈出窗口。 具有position: fixed div可能會給您帶來類似的結果,並且可能使您免於使用Windows之間的這種通信方法,但是它還會導致每頁顯示一個對話框,因此您需要詢問服務器是否該對話框的另一個實例是運行。 不確定其他同步方法是否可行(本地存儲?)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM