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.
W jakiej przeglądarce występuje takie zachowanie? – shanet
Mam nadzieję, że to jest Twoja [odpowiedź] (http://stackoverflow.com/questions/2601761/change-browser-settings-by-script) _. –
wszystkie przeglądarki. Strona testowa
– user2819018