2012-11-15 68 views
2

我試圖實現以下目標:
在頁面A上,我們有一個訪問受限的鏈接到頁面B.訪問限制在服務器端處理PHP。
當用戶點擊這個鏈接到頁面B時,我們會在頁面A上顯示一個模式對話框(通過javascript),並將鏈接的href(B)作爲一個表單。 (爲用戶提供即時反饋,後退是將他重定向到登錄表單,將他重定向到他想訪問的站點。) 該系統運行良好。Javascript - 表單提交後的目標=「_ blank」後重新加載頁面

但現在我的問題:
我們訪問應該在新窗口中打開的受限保護的鏈接。
現在,如果我在表單上使用target =「_ blank」,則用戶在他來自(A)的頁面上保持註銷狀態,但仍在後臺打開。
在表單提交到新窗口(B)後,有沒有辦法重新加載頁面(A,在後臺)?

我的第一個想法是使用window.location.reload();在頁面A的提交處理程序。
這不適用於鉻,從我的理解可以創建競爭條件。

另一個想法是通過ajax調用登錄用戶並通過javascript打開一個新窗口。有沒有辦法做到這一點,而不必處理彈出窗口阻止程序?


我實現了lostsource的思想(見下文),只是稍加了一點。
因爲我只需要重新載入一次,所以setInterval的計時器可以在cookie改變時停止。

var ri=setInterval(function() { 
    if(oldCookie != document.cookie) { 
     // assuming a login happened, reload page 
     clearInterval(ri); 
     window.location.reload(); 
    } 
},1000); // check every second 

我還是很喜歡這個主意。 stackoverflow是一個很好的!

回答

2

假設你存儲一個cookie裏面PHP的會話信息,您也許能夠監控你document.cookie進行更改。

提交表單店目前的cookie的值,並監視它的變化與定時器之前:

form.onsubmit = function() { 
    var oldCookie = document.cookie; 

    var cookiePoll = setInterval(function() { 
     if(oldCookie != document.cookie) { 
      // stop polling 
      clearInterval(cookiePoll); 

      // assuming a login happened, reload page 
      window.location.reload(); 
     } 
    },1000); // check every second 
} 
+0

非常感謝!我喜歡這個概念。 只需要稍微加一點: 如果你不停止這樣一個快速間隔的時間間隔,甚至在頁面可以重新加載之前就會重複,從而使其有效掛起。 所以我增加了一個明確的區間: '變種RI =的setInterval(函數(){ 如果(oldCookie =的document.cookie){// 假設一個登錄發生,刷新頁面 clearInterval(RI); window.location的! .reload(); } },1000); //檢查每一秒鐘' – baru

+0

已更新的答案代碼抱歉,我錯過了 – lostsource

0

在父頁面上,您是否因爲登錄而發生任何視覺/功能更改?像任何可能的新行動一樣? 如果沒有,那麼你不必做任何事情,因爲你會檢查從父頁面的每一個動作登錄,你可以檢查權限。

如果有變更或附加的功能,你可以調用javascript函數在父,說reloadMe,使用window.opener.reloadMe()

+0

是的,對不起,不夠清楚。由於模態對話可以從任何頁面(從導航)打開,所以父頁面(頁面A)上的改變可能相當大。 window.opener是否從由target =「_ blank」窗體打開的窗口中工作? – baru

+0

我認爲它的確如此。你有什麼問題嗎? – Nivas

+0

非常感謝! 我接受了lostsource的建議,因爲它更靈活一些,因爲我不必操縱目標頁面。 你的答案仍然非常有價值。對不起,我無法贊成它,因爲我剛剛創建了一個帳戶。 – baru

0

爲什麼不只是一個簡單的setTimeout

setTimeout(function(){ location.reload(); }, 1000); 

這是一個有點哈克,但似乎適合你的情況。

相關問題