我的javascript代碼打開一些窗口槽:Javascript:持久化窗口對象引用?
var win = window.open();
我將win參考存儲在一個包含所有其他打開窗口的數組中。
一切正常,直到開啓者刷新。
所以我想要實現的是在加載「主」窗口時取回所有對打開的窗口的引用。
爲了實現這一點,我必須:
1.在卸載 時保留所有引用2.在load 上獲取引用3.用新的opener更新引用
這可能嗎?如果是這樣的話?
我的javascript代碼打開一些窗口槽:Javascript:持久化窗口對象引用?
var win = window.open();
我將win參考存儲在一個包含所有其他打開窗口的數組中。
一切正常,直到開啓者刷新。
所以我想要實現的是在加載「主」窗口時取回所有對打開的窗口的引用。
爲了實現這一點,我必須:
1.在卸載 時保留所有引用2.在load 上獲取引用3.用新的opener更新引用
這可能嗎?如果是這樣的話?
我是如何解決這個問題的。
子窗口「opener」屬性保持對打開它的WINDOW的引用,所以當主窗口刷新時,窗口不會改變,所以開啓者引用仍然是相同的。 當開啓器爲空時唯一的情況是當窗口關閉時*
在主窗口的卸載事件上,我在子窗口上調用一個設置超時的javaScript函數。當超時結束時,我測試開啓者參考並嘗試註冊返回,因爲參考仍然正確。
這樣我有所有的孩子參考回來! ;)
當然,如果在主窗口中加載的文檔不是我的文檔,但是,例如www.google.com註冊返回子引用失敗。
此解決方案已經在Firefox,IE和Chrome下測試。
*在Chrome中,當您鍵入新地址時,它會啓動一個新窗口,因此opener也會爲空。
這聽起來很複雜(閱讀:有問題)。
自從回頭再回到最初的HTTP協議以來,您提出的問題一直是個問題。
簡短的回答是否定的,這是不可能的。當您刷新父項時,所有對子項的引用都將丟失。在所有的現實中,這是相當現實的......父母被「刷新」......孩子們獲得了父母留下的所有資源......對不起,脫離主題,很好。 Web是無狀態的,因此一旦頁面刷新,重新加載,關閉,打開或附加了任何其他動詞,該頁面將被視爲新的文檔。
這在Chrome/FireFox中工作正常,但在IE無法正常工作。
類似下面的內容將起作用,但爲了重新連接孩子/父母之間的關係,必須從孩子完成。下面的腳本/標記將舉例說明。 所以我不會使用它,但它只是作爲一個例子。
步驟:
HTMLPage 。HTM:
<input type="button" onclick="openChild();" value="Open Child" />
<input type="button" onclick="refreshParent();" value="Refresh Parent" />
<input type="button" onclick="linkParent();" value="Link Parent" />
<input type="button" onclick="checkRelationship();" value="Check Relationship" />
<input type="button" onclick="refreshChild();" value="Refresh Child" />
<script type="text/javascript" language="javascript">
var child;
function openChild() {
child = window.open("HTMLPage.htm");
}
function refreshParent() {
alert("refreshing parent");
window.opener.location.href = window.opener.location.href;
}
function linkParent() {
window.opener.child = window;
checkRelationship();
}
function checkRelationship() {
alert("Parent: " + window.opener + ". Children:" + child);
}
function refreshChild() {
child.location.href = child.location.href;
}
</script>
那麼接下來我的下一個問題是:
什麼是你想實現這個?當情況確實需要一個窗口時,我全部都是使用模態窗口/彈出窗口,但是你需要一組窗口嗎?
父頁面是否需要刷新?你可以在父頁面上粘貼一個iframe,並刷新它(IE。文件上傳等,主頁面不需要刷新)。
我根本不是一個蘋果迷的男孩,但這個鏈接給使用的IFrame的腳本一個很好的洞察力:http://developer.apple.com/internet/webcontent/iframe.html
我希望這有助於。
要麼避免重新刷新主窗口(使用AJAX或iframes),要麼將「主窗口」放入框架集中,以便實際上只重載「主框架」 - 然後您可以將變量粘貼到父框架中
frame ....設置....:P帶我回到geocity天。 –
2010-09-24 16:38:31
當你不得不訴諸(JavaScript控制)彈出式窗口,這是足夠邪惡的,框架是不是更邪惡...... – mihi 2010-09-25 14:10:07