url - window.location.href vs window.location.replace vs window.location.assign i JavaScript


Hva er forskjellen mellom

  1. window.location.href="http://example.com";
  2. window.location.replace("http://example.com");
  3. window.location.assign("http://example.com");

Jeg har lest i mange forum at window.location.assign() bare erstatter den nåværende økt-historikken og derfor vil ikke tilbake-knappen i nettleseren fungere. Imidlertid klarer jeg ikke å reprodusere dette.

function fnSetVariable() {
    //window.location.href = "http://example.com";
    window.location.replace("http://example.com");
    //window.location.assign("http://example.com");
}

<a onmouseover="fnSetVariable();" 
   href="PageCachingByParam.aspx?id=12" >
   CLICK 
</a>

Svar #1

Disse gjør det samme:

window.location.assign(url);
window.location = url;
window.location.href = url;

De navigerer enkelt til den nye URL-en. replace-metoden, derimot, navigerer til URL-en uten å legge til en ny oppføring i historikken.

Så, det du har lest i de mange forumene er ikke korrekt. assign-metoden legger til en ny post i historikken.

Referanse: https://developer.mozilla.org/en-US/docs/Web/API/Window/location

Svar #2

Avsnittet om at man ikke kan bruke Tilbake-knappen er en vanlig misforståelse. window.location.replace(URL) fjerner den øverste éne posten fra historikklisten for siden, ved å overskrive den med den nye posten, så brukeren kan ikke enkelt gå tilbake til akkurat DENNE nettsiden. Funksjonen sletter IKKE hele sidens historikkliste, og den gjør heller ikke Tilbake-knappen fullstendig ufunksjonell.

(Ingen funksjon eller kombinasjon av parametere som jeg kjenner til kan endre eller overskrive historikkoppføringer som du ikke eier helt sikkert - nettlesere implementerer vanligvis denne sikkerhetsbegrensningen ved ganske enkelt å ikke engang definere noen operasjon som kan påvirke andre oppføringer enn øverste i sidehistorikken. Jeg grøsser ved tanken på hvilke skumle ting skadelig programvare kunne gjort hvis en slik funksjon eksisterte.)

Hvis du virkelig vil gjøre Tilbake-knappen ufunksjonell (sannsynligvis ikke «brukervennlig»: tenk deg om igjen om det er virkelig det du vil gjøre), «åpne» et helt nytt vindu. (Du kan også «åpne» en popup som ikke engang har en «Tilbake»-knapp ... men popups er ikke veldig populære i disse dager :-) Hvis du vil at siden din alltid skal vises uansett hva brukeren gjør (igjen, «brukervennligheten» er tvilsom), sett opp en window.onunload-handler som bare laster siden din helt på nytt fra begynnelsen hver gang.

Relaterte artikler