2011-06-08 134 views
0
Window A opens window B 
Window A opens window C 

On Window C (after user action) I need Window B refreshed. 

一些更多的解釋: 是的。窗口A是主日曆。窗口B手動打開並且較小並顯示關於日曆的統計信息(窗口A)從另一個彈出窗口的JavaScript刷新彈出

當用戶單擊窗口A中的日曆事件時,窗口C打開。當用戶在窗口C上更改信息時,窗口B(統計信息)需要更新。

+1

你真的需要打開多個窗口,可能會混淆你的用戶嗎?你可以使用標籤,模式窗口或其他用戶友好的方法嗎? – 2011-06-08 17:12:04

+0

是的。窗口A是主日曆。窗口B較小並顯示關於窗口A的統計信息。窗口C是顯示剛剛單擊的日曆事件的詳細信息的UI。當用戶在窗口c上更改信息時,窗口b(統計信息)必須更改。 – user713813 2011-06-08 17:18:34

+0

我回答然後刪除它 - 你改變了這個問題說「我需要刷新窗口B」(而不是A)還是我瘋了? – 2011-06-08 17:23:08

回答

1

我不得不提醒你,你正在努力實現是不是一個好的做法的第一位。

許多瀏覽器正在打開新標籤而不是新窗口,這會影響window.opener的可用性。儘管這在很大程度上取決於瀏覽器設置。

所以,首先你應該測試一下,看看你的代碼真的是打開新的窗口,而不是新的選項卡。現在

,在a.html你應該有這樣的:

var windowB=window.open("b.html"); 
var windowC=window.open("c.html"); 

在c.html你應該有這樣的:

function openNewPage() { 
    window.opener.windowB.location.reload(true); 
} 

,並呼籲用戶交互openNewPage()函數。

+0

謝謝。所以我不知道如果瀏覽器打開它作爲製表符,window.opener將爲空。這真的是打擊。有沒有辦法解決?如果不是的話,我唯一的解決方案就是不斷更新窗口b在一個我不想做的定時器上。 – user713813 2011-06-08 18:23:22

+0

所以這裏是超級簡單的解決方案。 in window A window.open(「blah.aspx」,「windowB」); 然後再在窗口中再次執行c window.open(「blah.aspx」,「windowB」); – user713813 2011-06-08 23:38:00

0

您需要爲彼此設置子窗口彼此的引用。這是一個簡單的演示。

var b= window.open(''); 
var c= window.open(''); 

b.test=function() { 
    alert('Function in window B'); 
}; 

c.test=function() { 
    b.test(); 
    return false; 
}; 
$(b.document).find('body').append('<div>Window B. <a href="#" onclick="return test();">Click here</a></div>'); 
$(c.document).find('body').append('<div>Window C. <a href="#" onclick="return test();">Click here</a></div>'); 

http://jsfiddle.net/9ZCX3/25/

+0

請求jquery嗎? – user713813 2011-06-08 19:29:37

+0

我只使用jquery設置示例並填充創建的窗口。除此之外沒有jquery。 – 2011-06-08 19:33:26

+0

在你的例子中,我看不到窗口c如何重新加載窗口b – user713813 2011-06-08 20:36:31