2011-08-24 38 views
4

我運行一個電子商務網站,當客戶提交訂單時,我需要讓這個彈出窗口工作。理想情況下,彈出窗口會在訂單成功頁面加載時出現,但彈出窗口阻止程序將停止此操作。選擇並聚焦一個已經存在的窗口

取而代之,當使用單擊「確認訂單」按鈕時,我會生成彈出式窗口,但會遮住訂單結束前結帳重定向到的3DSecure頁面。

爲了抵消這一點,我在用戶點擊「確認訂單」時創建彈出窗口,但立即重新調整主窗口的焦點;如果你願意的話,它會成爲流行音樂我的計劃是從訂單成功頁面重新調整這個新窗口。

問題是我無法找到一種方法來獲取現有彈出窗口的對象,因此我可以將焦點放在它上面。如果我使用window.open(url,windowName,options)創建窗口,有沒有辦法從另一個頁面引用該窗口?沿着window.load(windowName)的線會是理想的。

回答

1

這很棘手,但這適用於Chrome。首先,在打開的窗口:

window.open('/test', 'testw', ''); 

另一個鏈接(即使在另一頁),通過將同一窗口的名稱打開「頁面」在同一窗口中。網址是JavaScript的(所以它是相當一個黑客):

window.open('javascript:void window.focus()', 'testw', ''); 

http://jsfiddle.net/pimvdb/KeHtp/

+3

我正要寫同樣的東西:)請注意,這將只在全部工作三頁(打開彈出窗口,彈出頁面和訂單確認頁面)屬於同一個域。 –

+0

@Wladimir Palant:很高興知道,我已經在想這樣的事情了。它確實不適用於跨域。 – pimvdb

+0

我剛剛注意到,如果您關閉主選項卡並再次打開,它不起作用。可能因爲他們之後是不同的流程。 – pimvdb

4

window.open的簽名是這樣的。

var windowObjectReference = window.open(strUrl, strWindowName[, strWindowFeatures]); 

MDN指出,

如果名爲strWindowName窗口已經存在,那麼strUrl是 加載到現有的窗口。在這種情況下, 方法的返回值是現有窗口,並且strWindowFeatures被忽略。 提供一個空字符串strUrl是一種方法,通過其名稱獲取對 開放窗口的引用,而不更改窗口的位置。

所以這應該適合你。

window.open('', 'windowName', ''); 

根據每當一個窗口被打開的引用創建它MDN,

var windowObjectReference = window.open("http://www.google.com", "popup", "width=500,height=500"); 

你可以使用引用總是加載它像

if(windowObjectReference != null || !windowObjectReference.closed) { 
    windowObjectReference .focus(); 
} 

+0

他要求一種方法來引用不同頁面的彈出窗口,而不是打開它的窗口。 –

+0

你也可以將這個引用傳遞給另一個頁面嗎?我很想知道是否以及如何將參考序列化。 – pimvdb

+0

我正在經歷這個。 http://stackoverflow.com/questions/87359/can-i-pass-a-javascript-variable-to-another-browser-window – naveen

相關問題