2009-11-12 34 views
1

我有以下情形:我如何確保一個自動關閉的窗口關閉了它的所有衍生窗口?

  1. 用戶在我們客戶的網站上點擊鏈接。它執行一個自動登錄與他們的憑據到我們的網站,這是在新窗口中啓動。
  2. 我們網站上的用戶註銷,併發送到頁面,該頁面執行關閉窗口的JavaScript window.close()。如果他們是直接登錄我們網站的客戶,那麼他們將回到登錄頁面,但自動登錄,他們沒有用於登錄頁面,因此頁面自動關閉更好。

但有時會發生以下情況

  1. 在一個客戶的網站的用戶點擊一個鏈接時,執行與他們的憑據來我們的網站,這將啓動在新窗口中自動登記表。
  2. 在我們的應用程序中,他們點擊「幫助」鏈接,該鏈接目前是另一個彈出窗口。
  3. 在某些時候,他們退出我們的應用程序,關閉該窗口。
  4. 幫助窗口仍處於打開狀態。
  5. 用戶單擊幫助窗口中的鏈接。
  6. 用戶不再被登錄,現在轉到該幫助窗口中的登錄屏幕。
  7. MASS HYSTERIA!

所以我想要做的是確保當原始窗口關閉時,它也關閉它產生的任何彈出窗口。我認爲這可以用JavaScript來完成,但是怎麼做?

附錄:以下建議很好,但問題是瀏覽器關閉時用戶所在的頁面與生成彈出窗口的頁面不同,因此頁面的句柄全部消失。我如何獲得具有特定名稱的彈出窗口的句柄?

回答

2
<html> 
<head> 
<script> 
var childwindows=new Array(); 
function openchild(){ 
    var childW=window.open('in.html'); 
    childwindows[childwindows.length]=childW; 
} 

function closewindow(){ 
    for(i in childwindows){ 
     if(childwindows[i] && !childwindows[i].closed) {childwindows[i].closewindow();} 
    } 
    window.close(); 
} 
</script> 
</head> 
<body> 
<br/> 
<a onclick="openchild();">open child window</a> 
<br/><br/> 
<a onclick="closewindow();">close me</a> 
</body> 
</html> 
1

跟蹤您打開彈出窗口的窗口名稱。

有一個頁面,純粹做一個window.close()的

當你會做一個正常的window.close()的,你一定要做一個window.open(「我們密切頁面」,windowNameIStored)爲每個彈出窗口。

這是我向下游提交給我們的供應商的一個修復程序,效果很好。

0

停止使用彈出窗口,這不是1998 :)

嚴重的是,儘管所有的內置瀏覽器功能和第三方應用程序也阻止他們,他們已經成爲非常不可靠的。你100%肯定彈出窗口打開了嗎?您必須進行測試才能確定,但​​是也可能是第三方應用程序在測試完成後關閉它,誰知道,所以現在客戶的體驗不好。如果他們實際上向客戶付款,客戶可能會賠錢。當然,你可以發出一條消息說「關閉你的彈出窗口阻止程序」,但老實說,有多少用戶真的知道該怎麼做?

每次我被要求做一個彈出窗口時,我只是盯着那些請求它的人,就像他們在說其他語言一樣,然後詢問它是否是1998年。彈出窗口是一個或多個如下:糟糕的用戶界面設計,無知的管理者,和/或馬虎/懶惰的開發。雖然我相信還有其他原因。

只是我的2美分。

+0

在這種情況下,彈出窗口很有意義 - 至少當用戶通過自動登錄來到我們的網站時。他們不想被排除在原來的會話之外,也只是登錄到我們的。 此外,這不是一個問題的答案,作爲一個評論會更好,只是FYI – 2009-11-12 23:43:43

+0

我同意部分...如果最終用戶是在類似extranet的東西,可能適合打開一個新窗口用於外部網絡之外的東西。對他所描述的「幫助」部分使用彈出式窗口,這就是我所指的不好的。 – paulj 2009-11-13 16:27:20

+0

paulj - 如何在不使用彈出窗口的情況下顯示「幫助」部分? 最終用戶可能需要他們正在查看的頁面上的某些內容的幫助,在這種情況下,彈出窗口顯示幫助可能有用,因爲他們不會失去他們可能在主頁面上處理的任何內容。 – David 2013-07-19 22:12:41