Próbuję otworzyć adres URL w nowej karcie, a nie w wyskakującym oknie.
Widziałem powiązane pytania, w których odpowiedzi wyglądałyby mniej więcej tak:
window.open(url,'_blank');
window.open(url);
Ale żaden z nich nie działał dla mnie, przeglądarka nadal próbowała otworzyć wyskakujące okienko.
javascript
znak
źródło
źródło
Odpowiedzi:
Nic, co autor może zrobić, nie może otworzyć w nowej karcie zamiast w nowym oknie; jest to preferencja użytkownika . (Należy pamiętać, że domyślna preferencja użytkownika w większości przeglądarek dotyczy nowych kart, więc trywialny test w przeglądarce, w której preferencje te nie zostały zmienione, nie wykaże tego).
CSS3 zaproponował nowy cel , ale specyfikacja została porzucona .
Odwrotna nie jest prawdziwe określając wymiary okna w trzecim argumencie
window.open()
, możesz uruchomić nowe okno, gdy preferowane są tabulatory.źródło
window.open
mówi przeglądarce, aby otworzyła coś nowego, a następnie przeglądarka otwiera to, co jest wybrane w jej ustawieniach - zakładce lub oknie. W testowanych przeglądarkach zmień ustawienia, aby otworzyć w nowym oknie zamiast karty, a zobaczysz, że rozwiązania innych są złe.To podstęp
W większości przypadków powinno to nastąpić bezpośrednio w
onclick
module obsługi łącza, aby zapobiec blokowaniu wyskakujących okienek i domyślnemu zachowaniu „nowego okna”. Możesz to zrobić w ten sposób lub dodając detektor zdarzeń do swojegoDOM
obiektu.http://www.tutsplanet.com/open-url-new-tab-using-javascript/
źródło
window.open()
nie otworzy się w nowej karcie, jeśli nie dzieje się to podczas rzeczywistego zdarzenia kliknięcia. W podanym przykładzie otwierany jest adres URL rzeczywistego zdarzenia kliknięcia. Działa to pod warunkiem, że użytkownik ma odpowiednie ustawienia w przeglądarce .Podobnie, jeśli próbujesz wykonać wywołanie Ajax w ramach funkcji kliknięcia i chcesz otworzyć okno sukcesu, upewnij się, że wykonujesz wywołanie Ajax z
async : false
zestawem opcji.źródło
async: false
nie działa w Chrome. Aby otworzyć nowe okno z wywołania zwrotnego, musisz najpierw otworzyć puste okno przed wysłaniem żądania HTTP, a następnie zaktualizować je. Oto dobry hack .window.open
Nie można niezawodnie otwierać wyskakujących okienek w nowej karcie we wszystkich przeglądarkachRóżne przeglądarki implementują zachowanie
window.open
na różne sposoby, szczególnie w odniesieniu do preferencji przeglądarki użytkownika. Nie można oczekiwać, że to samo zachowaniewindow.open
będzie prawdziwe we wszystkich przeglądarkach Internet Explorer, Firefox i Chrome, ze względu na różne sposoby, w jakie obsługują preferencje przeglądarki użytkownika.Na przykład użytkownicy programu Internet Explorer (11) mogą otwierać wyskakujące okienka w nowym oknie lub nowej karcie, nie można zmusić użytkowników programu Internet Explorer 11 do otwierania wyskakujących okienek w określony sposób
window.open
, jak wspomniano w odpowiedzi Quentina .W przypadku użytkowników przeglądarki Firefox (29) korzystanie z nich
window.open(url, '_blank')
zależy od preferencji kart przeglądarki, ale nadal można zmusić ich do otwierania wyskakujących okienek w nowym oknie, określając szerokość i wysokość (patrz sekcja „Co z Chrome?” Poniżej).Demonstracja
Przejdź do ustawień przeglądarki i skonfiguruj ją, aby otwierać wyskakujące okienka w nowym oknie.
Internet Explorer (11)
Strona testowa
Po skonfigurowaniu przeglądarki Internet Explorer (11) do otwierania wyskakujących okienek w nowym oknie, jak pokazano powyżej, użyj następującej strony testowej do przetestowania
window.open
:Zauważ, że wyskakujące okienka są otwierane w nowym oknie, a nie w nowej karcie.
Możesz również przetestować te fragmenty powyżej w przeglądarce Firefox (29) z preferencjami tabulatorów ustawionymi na nowe okna i zobaczyć te same wyniki.
Co z Chrome? Implementuje się
window.open
inaczej niż Internet Explorer (11) i Firefox (29).Nie jestem w 100% pewien, ale wygląda na to, że Chrome (wersja
34.0.1847.131 m
) nie wydaje się mieć żadnych ustawień, których użytkownik może użyć, aby wybrać, czy otwierać wyskakujące okienka w nowym oknie lub nowej karcie (np. Firefox i Internet Explorer mieć). Sprawdziłem dokumentację Chrome do zarządzania wyskakującymi oknami , ale nic nie wspominało o takich rzeczach.Również po raz kolejny różne przeglądarki wydają się inaczej wdrażać zachowanie
window.open
. W Chrome i Firefox określenie szerokości i wysokości wymusi wyskakujące okienko, nawet jeśli użytkownik ustawił Firefoksa (29) na otwieranie nowych okien w nowej karcie (jak wspomniano w odpowiedziach na JavaScript otwieranie w nowym oknie, a nie na karcie ) :Jednak ten sam fragment kodu powyżej zawsze otworzy nową kartę w Internet Explorerze 11, jeśli użytkownicy ustawią karty jako preferencje przeglądarki, nawet brak określenia szerokości i wysokości wymusi dla nich nowe wyskakujące okno.
Tak więc zachowanie
window.open
w Chrome wydaje się być otwierane wyskakujące okienka w nowej karcie, gdy stosuje się wonclick
przypadku, aby otworzyć je w nowych oknach, gdy używana z konsoli przeglądarki ( jak wspomniano przez innych ludzi ), i otworzyć je w nowych oknach, gdy określone za pomocą szerokości i wysokości.Podsumowanie
Różne przeglądarki
window.open
różnie implementują zachowanie w zależności od preferencji użytkowników. Nie można oczekiwać, że to samo zachowaniewindow.open
będzie prawdziwe we wszystkich przeglądarkach Internet Explorer, Firefox i Chrome, ze względu na różne sposoby, w jakie obsługują preferencje przeglądarki użytkownika.Dodatkowe czytanie
window.open
dokumentacja .źródło
Jedna wkładka:
Tworzy wirtualny
a
element, daje go,target="_blank"
aby otwierał się w nowej karcie, daje mu właściwy,url
href
a następnie klika.A jeśli chcesz, na tej podstawie możesz stworzyć jakąś funkcję:
a następnie możesz użyć go w następujący sposób:
Ważna uwaga:
openInNewTab
(jak również każde inne rozwiązanie na tej stronie) należy wywołać podczas wywołania zwrotnego akcji użytkownika - np. zdarzenie kliknięcia wewnątrz (nie jest konieczne bezpośrednio w funkcji wywołania zwrotnego, ale podczas akcji kliknięcia).Jeśli zadzwonisz ręcznie w przypadkowym momencie (np. W odstępie czasu lub po odpowiedzi serwera) - może zostać zablokowany przez przeglądarkę (co ma sens, ponieważ stanowiłoby to zagrożenie bezpieczeństwa i może prowadzić do bardzo złej wygody użytkownika )
źródło
$('<a />',{'href': url, 'target', '_blank'}).get(0).click();
Object.assign(document.createElement('a'), { target: '_blank', href: 'URL_HERE'}).click();
Jeśli go użyjesz
window.open(url, '_blank')
, zostanie on zablokowany (blokowanie wyskakujących okienek) w Chrome.Spróbuj tego:
Z czystym JavaScript,
źródło
the request was made in a sandboxed frame whose 'allow-popups' permission is not set
Aby rozwinąć odpowiedź Stevena Spielberga, zrobiłem to w takim przypadku:
W ten sposób tuż przed tym, jak przeglądarka podąży za linkiem, ustawiam atrybut docelowy, dzięki czemu link otworzy się w nowej karcie lub oknie (w zależności od ustawień użytkownika ).
Przykład jednego wiersza w jQuery:
Można to również osiągnąć za pomocą natywnych interfejsów API DOM przeglądarki:
źródło
Korzystam z poniższych i działa bardzo dobrze!
źródło
Myślę, że nie możesz tego kontrolować. Jeśli użytkownik skonfigurował przeglądarkę tak, aby otwierała łącza w nowym oknie, nie można tego zmusić do otwierania łączy w nowej karcie.
JavaScript otwiera się w nowym oknie, a nie na karcie
źródło
Ciekawym faktem jest to, że nowej karty nie można otworzyć, jeśli użytkownik nie wywoła akcji (kliknięcia przycisku lub czegoś) lub jeśli jest asynchroniczny, na przykład NIE otworzy się w nowej karcie:
Może się to jednak otworzyć w nowej karcie, w zależności od ustawień przeglądarki:
źródło
<script>open('http://google.com')</script>
do.html
pliku i otwórz go w nowej instalacji najnowszej wersji Firefoksa; zauważysz, że Firefox szczęśliwie otwiera Google w nowej karcie (być może po tym, jak chcesz, aby zezwalał na wyskakujące okienka), a nie w nowym oknie.Po prostu pominięcie parametrów [strWindowFeatures] otworzy nową kartę, O ile ustawienie przeglądarki nie zastąpi ustawień przeglądarki (ustawienie przeglądarki przebija JavaScript).
Nowe okno
Nowa karta
- lub -
źródło
źródło
Możesz użyć lewy z
form
:Demo jsFiddle
źródło
name
klucz ivalue
wartość dla wszystkich parametrów wewnątrz parametrów zapytania. A następnie prześlij formularza
tagu zamiast formularza i używając.click()
metody jQuery do „przesłania” go. sprawdź moją odpowiedźNie ma to nic wspólnego z ustawieniami przeglądarki, jeśli próbujesz otworzyć nową kartę z funkcji niestandardowej.
Na tej stronie otwórz konsolę JavaScript i wpisz:
I spróbuje otworzyć wyskakujące okienko niezależnie od twoich ustawień, ponieważ „kliknięcie” pochodzi z akcji niestandardowej.
Aby zachowywać się jak rzeczywiste „kliknięcie myszką” na link, musisz postępować zgodnie z radą @ spirinvladimir i naprawdę go utworzyć:
Oto kompletny przykład (nie próbuj go na jsFiddle lub podobnych edytorach internetowych, ponieważ nie pozwoli ci to przekierować na zewnętrzne strony z tego miejsca):
źródło
w = window.open("placeholder"); $.ajax(...ajax call that returns the url...) success (...w.location = data.url...)
zgodnie z theandystratton.com/2012źródło
JQuery
JS
źródło
Lub możesz po prostu utworzyć element łącza i kliknąć go ...
Nie powinno to być blokowane przez żadne programy blokujące wyskakujące okienka ... Mam nadzieję.
źródło
Istnieje odpowiedź na to pytanie i nie jest to nie.
Krok 1: Utwórz niewidoczny link:
<a id="yourId" href="yourlink.html" target="_blank" style="display: none;"></a>
Krok 2: Kliknij ten link programowo:
document.getElementById("yourId").click();
Proszę bardzo! Działa dla mnie urok.
źródło
Zbadałem wiele informacji o tym, jak otworzyć nową kartę i pozostać na tej samej karcie. Znalazłem jedną małą sztuczkę, aby to zrobić. Załóżmy, że masz adres URL, który musisz otworzyć - newUrl i stary adres URL - currentUrl , na którym musisz pozostać po otwarciu nowej karty. Kod JS będzie wyglądał następująco:
źródło
Jak o stworzenie
<a>
ze_blank
jakotarget
wartość atrybutu, aurl
jakohref
, z wyświetlaczem styl: ukryte z aa elementu dzieci? Następnie dodaj do DOM, a następnie uruchom zdarzenie click na elemencie potomnym.AKTUALIZACJA
To nie działa. Przeglądarka zapobiega domyślnemu zachowaniu. Można go uruchomić programowo, ale nie jest zgodny z domyślnym zachowaniem.
Sprawdź i przekonaj się sam: http://jsfiddle.net/4S4ET/
źródło
Otwieranie nowej karty z poziomu rozszerzenia przeglądarki Firefox (Mozilla) wygląda następująco:
źródło
Ten sposób jest podobny do powyższego rozwiązania, ale wdrożony inaczej
.social_icon -> jakaś klasa z CSS
źródło
Może to być włamanie, ale w Firefoksie, jeśli podasz trzeci parametr, „fullscreen = yes”, otworzy się nowe okno.
Na przykład,
Wygląda na to, że faktycznie zastępuje ustawienia przeglądarki.
źródło
to działa dla mnie, po prostu zapobiegaj zdarzeniu, dodaj adres URL, a
<a>
tag
następnie uruchom na nim zdarzenie kliknięciatag
.źródło
window.open(url)
Otworzy url w nowej karcie przeglądarki. Alternatywa Belowe JSOto działający przykład (fragmenty przepływu stosu nie pozwalają na otwarcie nowej karty)
źródło
To, czy otworzyć adres URL w nowej karcie, czy w nowym oknie, jest faktycznie kontrolowane przez preferencje przeglądarki użytkownika. Nie ma możliwości zastąpienia go w JavaScript.
window.open()
zachowuje się różnie w zależności od sposobu jego użycia. Jeśli zostanie wywołany w wyniku bezpośredniego działania użytkownika , powiedzmy, że kliknięcie przycisku powinno działać dobrze i otworzyć nową kartę (lub okno):Jeśli jednak spróbujesz otworzyć nową kartę z wywołania zwrotnego żądania AJAX , przeglądarka zablokuje ją, ponieważ była to bezpośrednia akcja użytkownika.
Aby ominąć blokadę wyskakujących okienek i otworzyć nową kartę z wywołania zwrotnego, oto mały hack :
źródło
Próbowałem w ten sposób i wydaje się, że działa dobrze
Znalazłem tutaj wiele działających przykładów:
http://www.gtalbot.org/FirefoxSection/Popup/PopupAndFirefox.html#TestPopupControl
źródło
Zgodzę się nieco z osobą, która napisała (parafrazując tutaj): „W przypadku linku na istniejącej stronie internetowej przeglądarka zawsze otworzy link w nowej karcie, jeśli nowa strona jest częścią tej samej strony internetowej, co istniejąca strona internetowa. ” Dla mnie przynajmniej ta „ogólna zasada” działa w Chrome, Firefox, Opera, IE, Safari, SeaMonkey i Konqueror.
W każdym razie istnieje mniej skomplikowany sposób na wykorzystanie tego, co przedstawiła druga osoba. Zakładając, że mówimy o Twojej własnej stronie internetowej („thissite.com” poniżej), w której chcesz kontrolować, co robi przeglądarka, a następnie poniżej chcesz, aby „specialpage.htm” był PUSTY, bez HTML w ogóle ( oszczędza czas wysyłania danych z serwera!).
źródło
Jeśli chcesz tylko otwierać linki zewnętrzne (linki prowadzące do innych stron), ten fragment JavaScript / jQuery działa dobrze:
źródło
Przeglądarka zawsze otworzy link w nowej karcie, jeśli link znajduje się w tej samej domenie (w tej samej witrynie). Jeśli link znajduje się w innej domenie, otworzy go w nowej karcie / oknie, w zależności od ustawień przeglądarki.
Zgodnie z tym możemy użyć:
I dodaj trochę kodu jQuery:
Więc najpierw otwórz nowe okno na tej samej stronie z celem _blank (otworzy się w nowej karcie), a następnie otwórz żądaną stronę internetową w tym nowym oknie.
źródło