2013-09-26 15 views
10

window.open() wywoływana z głównego wątku otwiera nową kartę domyślnie.javascript window.open z zwrotnego

Ale tu otwarte nowe okno za każdym razem (Opera 16 i Google Chrome 29)

<input type="button" value="Open" onclick="cb1()"> 

<script type="text/javascript"> 
function cb1() { 
    setTimeout(wo, 1000); //simple async 
} 

function wo() 
{ 
    var a = window.open("http://google.com", "w2"); 
    a.focus(); 
} 
</script> 

(lol, to jest moja odpowiedź na Open a URL in a new tab (and not a new window) using JavaScript).

Jak mogę otworzyć w zakładce (tutaj domyślnie w przeglądarce)?

+0

W jakiej przeglądarce występuje takie zachowanie? – shanet

+0

Mam nadzieję, że to jest Twoja [odpowiedź] (http://stackoverflow.com/questions/2601761/change-browser-settings-by-script) _. –

+0

wszystkie przeglądarki. Strona testowa user2819018

Odpowiedz

0

Jeśli nowe okno jest otwarte w nowej karcie lub w nowym przykład, zależy od ustawień przez użytkownika.

+0

OP stwierdził, że w pewnych okolicznościach otwierał się w nowej karcie, a w innych w nowym oknie, więc problem, który ma, jest oczywiście niezwiązany z ustawieniami użytkownika. – Yogh

10

Przeszliśmy przez ten sam problem i polowaliśmy na SO, aby uzyskać odpowiedź. Co okazało się prace w naszych warunkach i mądrością destyluje się następująco:

Problem jest związany z przeglądarki pop-up blokery uniemożliwiających programową otwarte okno. Przeglądarki umożliwiają otwieranie okna od rzeczywistych kliknięć użytkowników występujących w głównym wątku. Podobnie, jeśli wywołasz window.open w głównym wątku, zadziała, jak wspomniano powyżej. Zgodnie z tą odpowiedzią na Open a URL in a new tab (and not a new window) using JavaScript, jeśli używasz połączenia Ajax i chcesz otworzyć okno na sukces, musisz ustawić async: false, która działa, ponieważ spowoduje to zachowanie wszystkiego w głównym wątku.

Nie mogliśmy kontrolować nasze rozmowy Ajax takiego, ale okazało się, że inne rozwiązanie działa, ponieważ z tych samych powodów. Ostrzeżenie, jest nieco hacky i może nie być odpowiednie dla ciebie, biorąc pod uwagę twoje ograniczenia. Dzięki uprzejmości komentarza dotyczącego innej odpowiedzi na Open a URL in a new tab (and not a new window) using JavaScript otworzysz okno przed wywołaniem setTimeout, a następnie zaktualizujesz je w funkcji opóźnionej. Jest na to kilka sposobów. Zachowaj odwołanie do okna po jego otwarciu, w = window.open... i ustaw w.location lub otwórz z celem, window.open('', 'target_name'), z opóźnioną funkcją otwartą w tym celu, window.open('your-url', 'target_name') i polegaj na przeglądarce przechowującej odwołanie.

Oczywiście, jeśli użytkownik ma swoje ustawienia, aby otworzyć linków w nowym oknie nie ulegnie zmianie, ale to nie był problem dla PO.

+1

Dla tych, którzy potrzebują bardziej szczegółowego kodu, sprawdź ten wpis na blogu: http://theandystratton.com/2012/how-to-bypass-google-chromes-javascript-popup-blocker –

Powiązane problemy