2010-07-22 113 views
26

如果打開如下所示的窗口:Javascript如果已經在window.open中打開,將窗口置於前面?

window.open ("url","winName","location=0,width=300,height=214"); 

如果winName已經打開,它只是改變了窗口的URL。這是可以的,但如果該窗口位於當前窗口的後面,大多數用戶不會意識到這一點,並認爲它不是開放的。

有沒有什麼辦法,如果窗口已經打開,但它帶來的面前?

+0

[使用JavaScript,如何把一個已經存在的打開的窗口,以從另一個窗口代碼其他窗口前?(HTTP的可能重複:// stackoverflow.com/questions/2530572/using-javascript-how-do-i-bring-an-already-existing-open-window-to-the-front-on) – 2010-07-22 17:01:18

+2

@Andy在這個問題,用戶問如何將開啓者/父窗口從兒童/打開的窗口移到前面。我在問如何做到相反。從父/開窗器窗口將子窗口打開到最前面。如果這是有道理的。 – 2010-07-22 17:04:04

+0

對不起。我以前看過這個問題,但是 - 我現在找不到它了:-) – 2010-07-22 17:05:23

回答

2

window.focus()應用於窗口中的問題應該做的伎倆。

+0

你可以給我一個我嘗試過的例子:'editDaySched = window.open(...); editDaySched.focus();'在Chrome中,但它似乎沒有工作。謝謝。 – 2010-07-22 18:08:15

+0

如果以這種內聯方式調用focus(),它將無法工作,因爲該窗口尚不存在。你應該做的是在打開的窗口(這裏是editDaySched)中有一個函數,當onload事件觸發時調用window.focus()。你可以通過一個setTimeout來對開始者進行概念驗證,例如在5秒或6秒之後聚焦editDaySched窗口。 – Robusto 2010-07-22 18:32:56

44

更新:這個因爲鉻無法正常運作(21+)。解決方法是關閉/重新打開。

window.open()方法返回一個表示新窗口中的對象。你只需要window.focus()它:

var w = window.open ("url","winName","location=0,width=300,height=214"); 
w.focus(); 

或者乾脆:

window.open("url","winName","location=0,width=300,height=214").focus(); 
+2

如果彈出窗口沒有在同一應用程序主機中打開其他瀏覽器選項卡,則這隻適用於IE。即使彈出窗口關注其他選項卡,它也會在IE9中靜靜地失敗,可能也是舊版本。幸運的是(?),從一組選項卡中取消對彈出選項卡的保留會保留正確的主機窗口引用,並且它將恢復正常工作。 – 2013-02-12 20:29:46

+0

鍍鉻工作 – Guihgo 2017-02-22 21:54:46

7

更新:這個因爲鉻無法正常運作(21+)。解決方法是關閉/重新打開。

要小心,因爲當你打開一個新窗口,關鍵窗口可能仍然要執行一些代碼,也許有些這段代碼給它的焦點。你會看到你的新窗口是如何在前面打開的,並突然後退,因此,在這些情況下,設置一個超時是一個好主意,以便將焦點放在新窗口稍後,當所有在揭幕戰窗口的JavaScript執行,你可以這樣來做:

setTimeout(function(){window.focus();},1000); 

爲1000毫秒的量等待,窗口打開的窗口的名稱。 例如,您也可以在打開的正文窗口中使用此代碼。

+0

謝謝!這解決了我的一個長期問題。 – 2013-04-21 19:25:06

7

建議使用任何形式的.focus()的各種答案可能是而不是可以在所有瀏覽器中工作。

這個曾經在當天工作,但主要原因在於瀏覽器主動阻止黑幕廣告網絡將他們的彈出式廣告推到前臺。

在Mozilla Firefox中(具體取決於您的版本),有一個配置設置默認爲,可以阻止其他窗口(例如彈出窗口)自動聚焦。

您可以仔細發現在about:config頁(胎面此設置!)

dom.disable_window_flip: true

如果我記得正確使用此設置被稱爲像〜「allow_raise_or_lower_windows *

其他瀏覽器可以實現類似的東西,但很簡單,如果1的主流瀏覽器會默認阻止使用.focus(),那麼在嘗試調用它時就沒有多大用處。

因此,我見過的唯一解決方案就是查看窗口是否存在,並且尚未關閉......如果關閉了,請加載您想要的窗口。

function closePopupIfOpen(popupName){ 
    if(typeof(window[popupName]) != 'undefined' && !window[popupName].closed){ 
    window[popupName].close(); 
    } 
} 
打開彈出式窗口時,如果有一個機會,它已經打開(和安葬在其他窗口後面),然後嘗試打開您的彈出之前,你可以調用這個函數

closePopupIfOpen('fooWin'); 
var fooWin = window.open('someURL', 'foo', '...features...'); 

當然缺點是,如果窗口中有任何「重要」(例如部分填充的表單),它將會丟失。

+0

工作在鉻,但看起來不像它在IE11中有任何作用 – Samuel 2014-09-29 17:14:50

3

我通過添加

onclick="myWin = window.open('','winName','location=0,width=300,height=214'); myWin.focus()" 

到html元素(按鈕),然後通過JS更改URL固定這一點。

+0

工程偉大鉻沒有在其他瀏覽器測試 – relipse 2015-01-10 17:18:10

0

您可以使用jQuery:

myPopup = window.open(url, "Title","menubar=no, status=no, scrollbars=no, menubar=no, width=800, height=800"); 
$(myPopup).focus(); 
+1

jquery焦點只是標準focus()方法的包裝,所以添加沒有好處。 OP也沒有要求提供jQuery解決方案 – Liam 2016-07-13 15:30:14

相關問題