W Chrome otwiera się to w nowej karcie:
<button onclick="window.open('newpage.html', '_blank')" />
to otwiera się w nowym oknie (ale chciałbym, aby otworzyło się również w nowej karcie:
<script language="javascript">
window.open('newpage.html', '_blank');
</script>
Czy jest to wykonalne?
javascript
window.open
Andrzej
źródło
źródło
Odpowiedzi:
Nie możesz tego bezpośrednio kontrolować, ponieważ jest to opcja kontrolowana przez użytkowników Internet Explorera.
Otwieranie stron za pomocą Window.open z inną nazwą okna otworzy się w nowym oknie przeglądarki, takim jak wyskakujące okienko, LUB otworzy się w nowej karcie, jeśli użytkownik skonfigurował przeglądarkę tak, aby to zrobić.
EDYTOWAĆ:
Bardziej szczegółowe wyjaśnienie:
1. W nowoczesnych przeglądarkach window.open otworzy się w nowej karcie, a nie w wyskakującym okienku.
2. Możesz zmusić przeglądarkę do używania nowego okna („wyskakującego okienka”), określając opcje w trzecim parametrze
3. Jeśli wywołanie window.open nie było częścią zdarzenia zainicjowanego przez użytkownika, zostanie otwarte w nowym oknie.
4. „Zdarzenie inicjowane przez użytkownika” nie musi mieć tego samego wywołania funkcji - ale musi pochodzić z funkcji wywoływanej przez kliknięcie przez użytkownika
5. Jeśli zdarzenie zainicjowane przez użytkownika deleguje lub odracza wywołanie funkcji (w detektorze zdarzeń lub delegacie niezwiązanym ze zdarzeniem kliknięcia lub przy użyciu na przykład setTimeout), traci status „zainicjowany przez użytkownika”
6. Niektóre programy do blokowania wyskakujących okienek zezwalają na okna otwierane ze zdarzeń zainicjowanych przez użytkownika, ale nie pozwalają na otwieranie okien w inny sposób.
7. Jeśli którekolwiek wyskakujące okienka jest zablokowane, te, na które normalnie zezwala blokujący (poprzez zdarzenia inicjowane przez użytkownika), będą czasami również blokowane. Kilka przykładów…
Wymuszanie otwierania okna w nowej instancji przeglądarki zamiast w nowej karcie:
Poniższe zdarzenie kwalifikowałoby się jako zdarzenie inicjowane przez użytkownika, mimo że wywołuje inną funkcję:
Poniższe zdarzenia nie kwalifikują się jako zdarzenie inicjowane przez użytkownika, ponieważ setTimeout je odracza:
źródło
Czasami przydatne jest wymuszenie użycia karty, jeśli użytkownik to lubi. Jak stwierdził Prakash powyżej, czasami jest to podyktowane użyciem zdarzenia niezainicjowanego przez użytkownika, ale istnieją sposoby obejścia tego.
Na przykład:
zawsze otwiera „nowy adres URL” w nowym oknie przeglądarki, ponieważ funkcja „zawsze” nie jest uważana za inicjowaną przez użytkownika. Jeśli jednak to zrobimy:
otwieramy nowe okno przeglądarki lub tworzymy nową kartę, zgodnie z preferencjami użytkownika w kliknięciu przycisku, który jest zainicjowany przez użytkownika. Następnie po powrocie z postu AJAX ustawiamy lokalizację na żądany adres URL. Voila, wymuszamy korzystanie z karty, jeśli użytkownik to lubi.
źródło
jeśli używasz
window.open(url, '_blank')
, zostanie zablokowane (blokowanie wyskakujących okienek) w przeglądarce Chrome, Firefox itpSpróbuj tego,
działające skrzypce js dla tego http://jsfiddle.net/safeeronline/70kdacL4/2/
działające skrzypce js w oknie Ajax otwórz http://jsfiddle.net/safeeronline/70kdacL4/1/
źródło
W tej chwili (Chrome 39) używam tego kodu, aby otworzyć nową kartę:
Oczywiście może się to zmienić w przyszłych wersjach Chrome.
Używanie tego jest złym pomysłem, jeśli nie możesz kontrolować przeglądarki używanej przez użytkowników. Może nie działać w przyszłych wersjach lub z innymi ustawieniami.
źródło
VM646 js:12 Blocked opening 'http://www.stackoverflow.com/' in a new window because the request was made in a sandboxed frame whose 'allow-popups' permission is not set.
Spowoduje to otwarcie linku w nowej karcie w przeglądarce Chrome i Firefox oraz prawdopodobnie w innych przeglądarkach, których nie testowałem:
Zasadniczo otwiera nową pustą kartę, a następnie ustawia lokalizację tej pustej karty. Uważaj, jest to rodzaj włamania, ponieważ zachowanie karty / okna przeglądarki jest tak naprawdę domeną, odpowiedzialnością i wyborem przeglądarki i użytkownika.
Druga linia może zostać wywołana w wywołaniu zwrotnym (na przykład po wykonaniu jakiegoś żądania AJAX), ale wtedy przeglądarka nie rozpozna tego jako zdarzenia kliknięcia zainicjowanego przez użytkownika i może zablokować wyskakujące okienko.
źródło
$window
jest po prostu sposobem używania AngularJSwindow
. Możesz po prostu użyćwindow
zamiast tego. Więcej informacji: docs.angularjs.org/api/ng/service/$windowPrzejrzyste mini rozwiązanie
$('<form action="http://samedomainurl.com/" target="_blank"></form>').submit()
źródło
Możesz użyć tego kodu, aby otworzyć w nowej karcie.
Mam to ze stackoverflow ...
źródło
Najlepszy sposób, w jaki używam:
1- dodaj link do swojego html:
2- dodaj funkcję JS:
3- Po prostu wywołaj funkcję OpenNewTab z żądanym linkiem
źródło