Pytanie Jak mogę przekierować na inną stronę internetową?


Jak mogę przekierować użytkownika z jednej strony do drugiej za pomocą jQuery lub czystego JavaScript?


7737
2018-02-02 12:54


pochodzenie


Wciąż widzę zarówno window.location = url; i window.location.href = url; Czym się różnią? Czy oni są? BTW, nie wiedziałem o window.location.replace (url). Miły. - David M. Miller
window.location jest taki sam jak window.location.hrefpod względem zachowania. window.location zwraca obiekt. Gdyby .href nie jest ustawione, window.location domyślnie zmienia się parametr .href. Podsumowanie: Użyj jednego z nich jest w porządku. - Raptor
var url = "nazwa strony" $ (location) .attr ('href', url); - Mad Scientist
@MadScientist To jest odwrotny sposób na zrobienie tego. Obiekt lokalizacyjny nie jest elementem HTML i użycie obiektu jquery do ustawienia go wydaje się błędne. Dlaczego używałbyś tego, gdy prosty kod JS jest tak prosty? - Juan Mendes
Dlaczego chcesz przekierować? Formularz logowania nie powinien zostać przesłany? I nawet jeśli nie ma logiki na stronie docelowej, nadal będziesz mógł przesłać formularz na inną stronę. - Dimt


Odpowiedzi:


Po prostu nie przekierowujemy za pomocą jQuery

jQuery nie jest konieczne, i window.location.replace(...) najlepiej symuluje przekierowanie HTTP.

window.location.replace(...) jest lepsze niż użycie window.location.href, bo replace() nie przechowuje strony początkowej w historii sesji, co oznacza, że ​​użytkownik nie utknie w niekończącym się fiasku przycisku wstecz.

Jeśli chcesz zasymulować kliknięcie linku, użyj    location.href

Jeśli chcesz symulować przekierowanie HTTP, użyj location.replace

Na przykład:

// similar behavior as an HTTP redirect
window.location.replace("http://stackoverflow.com");

// similar behavior as clicking on a link
window.location.href = "http://stackoverflow.com";

12949
2018-02-03 04:24



w przypadku przycisku submit dodaj return false; także w twojej funkcji - Abhi
Pytanie dotyczy konkretnie javascript, ale warto zauważyć, że metaodświeżanie może być użyte jako powrót do błędu w przypadku, gdy użytkownik ma wyłączony javascript - Hoppe
@ NicolòMartini If (IE) document.write (""); - Jeff Noel
@ NicolòMartini Opublikowalem sposób nie tracenia REFERRERA poniżej, jeśli chcesz to sprawdzić! - Mark Pieszak - DevHelp.Online
Jeśli już używasz jQuery, po prostu użyj $(location).attr('href',url);. window.location.href wydaje się mieć niestałe zachowanie w niektórych przeglądarkach, w rzeczywistości nie działa w mojej wersji Firefoksa. Słyszałem opowiedzieć o ustawieniu window.location bezpośrednio nie działa w wersjach IE. - Noz


OSTRZEŻENIE: Ta odpowiedź została jedynie dostarczona jako możliwe rozwiązanie; to jest oczywiście nie najlepsze rozwiązanie, ponieważ wymaga jQuery. Zamiast tego wolą czyste rozwiązanie JavaScript.

$(location).attr('href', 'http://stackoverflow.com')

1473
2017-10-28 16:35



To jest dosłowna odpowiedź na to pytanie. Jeśli już korzystasz z Jquery, a więc już go załadowałeś, będzie to bardziej efektywne pod względem przepustowości i oczywiście wyraźniejsze będzie użycie skrótu - barrymac
Co ważniejsze, czy istnieje sposób, aby to zrobić z jQuery, która jest absracted? To jest tylko opakowanie dla window.location.href = url; Ale jeśli jQuery ma jakąś funkcję, która, jeśli window.location.href = url; nie działał w obecnym środowisku (przeglądarka, system operacyjny itp.) rdzenia jQuery mógłby zrekompensować? - Chris
Zmuszenie jQuery do równania w ten sposób jest po prostu śmieszne i bezcelowe, zwłaszcza odkąd window.location nie jest elementem i dlatego nie ma atrybutów. - Tim Down
@ Coffee Addict, 2-letni komentarz, ale proszę, naucz mnie jak location.href = 'http://stackoverflow.com'; jest bardziej gadatliwy niż alternatywa w odpowiedzi tutaj? Nawet jeśli usuniesz zmienną, jest ona jeszcze bardziej gadatliwa i więcej postaci korzysta z jQuery. - rlemon
@deltaray To jest nie inny sposób przekierowania, jak wspomniano powyżej, jest bez znaczenia otokiem wokół obiektu lokalizacji, który nie jest nawet elementem! To mi przypomina i.stack.imgur.com/ssRUr.gif - JCM


Standardowy "waniliowy" sposób JavaScript do przekierowania strony:

window.location.href = 'newPage.html';


Jeśli jesteś tutaj, ponieważ jesteś przegrywający HTTP_REFERER podczas przekierowywania, czytaj dalej:


Poniższa sekcja dotyczy osób używających HTTP_REFERER jako jeden z wielu bezpiecznych środków (choć nie jest to wielki środek ochronny). Jeśli używasz Internet Explorer 8 lub niżej, zmienne te są tracone podczas korzystania z dowolnej formy przekierowania strony JavaScript (location.href, itp.).

Poniżej zamierzamy wprowadzić alternatywę dla IE8 i niżej abyśmy nie stracili HTTP_REFERER. W przeciwnym razie możesz prawie zawsze po prostu użyć window.location.href.

Testowanie przeciwko HTTP_REFERER (Wklejanie URL, sesja itp.) mogą być pomocnym w informowaniu, czy żądanie jest zgodne z prawem. (Uwaga: istnieją również sposoby na obejście / przekierowanie tych stron odsyłających, co odnotowano w komentarzu do linku droopa


Proste rozwiązanie do testowania w różnych przeglądarkach (powrót do window.location.href dla przeglądarki Internet Explorer 9+ i wszystkich innych przeglądarek)

Stosowanie: redirect('anotherpage.aspx');

function redirect (url) {
    var ua        = navigator.userAgent.toLowerCase(),
        isIE      = ua.indexOf('msie') !== -1,
        version   = parseInt(ua.substr(4, 2), 10);

    // Internet Explorer 8 and lower
    if (isIE && version < 9) {
        var link = document.createElement('a');
        link.href = url;
        document.body.appendChild(link);
        link.click();
    }

    // All other browsers can use the standard window.location.href (they don't lose HTTP_REFERER like Internet Explorer 8 & lower does)
    else { 
        window.location.href = url; 
    }
}

509
2017-07-27 14:41



Uwaga dotycząca stopy: sprawdzenie strony wywołującej jako środka bezpieczeństwa jest marnym rozwiązaniem. duckduckgo.com/?q=referrer+spoofing - droope
Jeśli masz identyfikator sesji GET protokołu HTTP w adresie URL strony odsyłającej, możesz go użyć do sprawdzenia, czy w sesji jest ważność. - Andrew Fox
@mcpDESIGNS jesteś pewien, że próbujesz go użyć location.assign? Używam w mojej aplikacji z IE8 i nie tracę HTTP_REFERER nagłówek. - Buzinas
Przynajmniej w 2012 roku to nie działało, może później łatki IE8 naprawiły to - dobrze jest usłyszeć! - Mark Pieszak - DevHelp.Online


Posługiwać się:

// window.location
window.location.replace('http://www.example.com')
window.location.assign('http://www.example.com')
window.location.href = 'http://www.example.com'
document.location.href = '/path'

// window.history
window.history.back()
window.history.go(-1)

// window.navigate; ONLY for old versions of Internet Explorer
window.navigate('top.jsp')


// Probably no bueno
self.location = 'http://www.example.com';
top.location = 'http://www.example.com';

// jQuery
$(location).attr('href','http://www.example.com')
$(window).attr('location','http://www.example.com')
$(location).prop('href', 'http://www.example.com')

349
2018-01-28 04:28



window.navigate jest stary-IE-tylko (Firefox / Chrome nie obsługują tego). Jeśli chcesz wyliczyć wszystkie opcje, nie zapomnij o document.location. - Rob W
To nie wyjaśnia byle co w ogóle. Co ktoś ma wybrać? Wybierz losowo z listy? Co dodaje do istniejących odpowiedzi? - Léo Lam
Ta odpowiedź brzmi obecnie omawiane na meta - Bergi
@ LéoLam Dlatego istnieje wyszukiwarka Google. :-) Możesz wyszukiwać każdego z nich w Google i znaleźć różnicę. Nie chcesz wybierać losowo. - I am the Most Stupid Person
@IamtheMostStupidPerson dokładnie mój punkt. Odpowiedź jest bezużyteczna. - Léo Lam


Działa to dla każdej przeglądarki:

window.location.href = 'your_url';

269
2017-10-22 23:45



Możesz także zrobić document.location.replace(redirectURL) jeśli nie chcesz, aby pierwsza strona była w historii przeglądarki - jazzcat


Pomogłoby to, gdybyś był nieco bardziej opisowy w tym, co próbujesz zrobić. Jeśli próbujesz wygenerować dane stronicowane, istnieje kilka opcji, jak to zrobić. Możesz wygenerować osobne linki do każdej strony, do której chcesz mieć bezpośredni dostęp.

<a href='/path-to-page?page=1' class='pager-link'>1</a>
<a href='/path-to-page?page=2' class='pager-link'>2</a>
<span class='pager-link current-page'>3</a>
...

Zwróć uwagę, że bieżąca strona w przykładzie jest obsługiwana inaczej w kodzie i CSS.

Jeśli chcesz, aby dane stronicowane zostały zmienione za pośrednictwem AJAX, to w tym miejscu pojawi się jQuery. To, co możesz zrobić, to dodać moduł obsługi kliknięć do każdego z tagów zakotwiczonych odpowiadających innej stronie. Ten moduł obsługi kliknięć wywoła kod jQuery, który przechodzi i pobiera następną stronę za pośrednictwem AJAX i aktualizuje tabelę z nowymi danymi. Poniższy przykład zakłada, że ​​masz usługę internetową, która zwraca dane nowej strony.

$(document).ready( function() {
    $('a.pager-link').click( function() {
        var page = $(this).attr('href').split(/\?/)[1];
        $.ajax({
            type: 'POST',
            url: '/path-to-service',
            data: page,
            success: function(content) {
               $('#myTable').html(content);  // replace
            }
        });
        return false; // to stop link
    });
});

253
2018-02-02 13:18





też tak myślę location.replace(URL) jest najlepszym sposobem, ale jeśli chcesz powiadomić wyszukiwarki o twoim przekierowaniu (nie analizują kodu JavaScript, aby zobaczyć przekierowanie), powinieneś dodać rel="canonical" metatag do Twojej witryny.

Dodanie sekcji noscript z metatagem odświeżania HTML jest również dobrym rozwiązaniem. Proponuję ci użyć tego Narzędzie przekierowania JavaScript tworzyć przekierowania. Posiada również obsługę Internet Explorera do przekazywania strony wywołującej HTTP.

Przykładowy kod bez opóźnień wygląda następująco:

<!-- Place this snippet right after opening the head tag to make it work properly -->

<!-- This code is licensed under GNU GPL v3 -->
<!-- You are allowed to freely copy, distribute and use this code, but removing author credit is strictly prohibited -->
<!-- Generated by http://insider.zone/tools/client-side-url-redirect-generator/ -->

<!-- REDIRECTING STARTS -->
<link rel="canonical" href="https://yourdomain.com/"/>
<noscript>
    <meta http-equiv="refresh" content="0;URL=https://yourdomain.com/">
</noscript>
<!--[if lt IE 9]><script type="text/javascript">var IE_fix=true;</script><![endif]-->
<script type="text/javascript">
    var url = "https://yourdomain.com/";
    if(typeof IE_fix != "undefined") // IE8 and lower fix to pass the http referer
    {
        document.write("redirecting..."); // Don't remove this line or appendChild() will fail because it is called before document.onload to make the redirect as fast as possible. Nobody will see this text, it is only a tech fix.
        var referLink = document.createElement("a");
        referLink.href = url;
        document.body.appendChild(referLink);
        referLink.click();
    }
    else { window.location.replace(url); } // All other browsers
</script>
<!-- Credit goes to http://insider.zone/ -->
<!-- REDIRECTING ENDS -->

215
2018-04-25 10:12





Ale jeśli ktoś chce przekierować z powrotem na stronę główną, może użyć poniższego fragmentu.

window.location = window.location.host

Byłoby pomocne, gdybyś miał trzy różne środowiska, takie jak rozwój, etapy i produkcja.

Możesz eksplorować to okno lub obiekt window.location, umieszczając te słowa w Konsoli Chrome lub FirebugKonsola.


191
2017-10-30 12:15



window.location.replace (window.location.protocol + "//" + window.location.host) - moala
jeszcze prostsze: window.location = '/' - Iftah
Iftah - zależy to od meta tagu "base". - Rob Quist