Navigiert zu einer neuen Seite mit den verschiedenen Methoden, die die neue URL auf den Verlaufsstapel schieben: < /p>
Code: Select all
window.location = '...'
Code: Select all
window.location.assign('...')
Code: Select all
pushState({},"",'...')
Code: Select all
document.querySelector('a[href=...]').click()
- etc.
In other words, any page which redirects to a new page before the user has interacted will be prevented from appearing in the browser's history. This prevents the user from using the back button to revisit it, as well as prevents history.go(-1) wie erwartet arbeiten. Es ist so, als ob diese Seite nie existiert hat, einfach weil der Benutzer nicht damit interagierte. Ich habe eine Testseite auf den Coderäumen von W3schools eingerichtet, um dies zu demonstrieren. Beim ersten Besuch des Links zeigt die Site eine Nachricht mit einer Taste fort, um zu bestätigen, dass Sie benutzergenerierte Inhalte anzeigen. Wenn Sie auf die Schaltfläche klicken und dann die Site laden und umleiten lassen (zu example.com ), ohne erneut zu klicken, führt Sie die Schaltfläche Ihres Browsers zurück, um Sie zum Stackoverflow zu erhalten. Dies steht entschieden vor der Seite mit der Schaltfläche, auf die Sie geklickt haben. Wenn Sie vorwärts klicken, werden Sie dann auf example.com weitergeleitet und überspringen die Seite, auf die Sie geklickt haben. Bei den nachfolgenden Besuchen des Links können Sie mit Klicken gegen das Klicken auf die Seite abspielen, um das Quirk zu erleben. das führt die Umleitung durch: < /p>
Code: Select all
setTimeout( ()=> location = 'http://example.com' , 8000 );
< /code>
Mausover -Ereignisse werden nicht als Benutzeraktion angesehen. Weder sind Scrollereignisse. Sie müssen klicken, tippen oder eine Taste drücken. Beachten Sie, dass die Interaktion nicht unbedingt direkt mit der Seite sein muss - sie kann auch mit einem Lesemarketlet sein, das im Seitenkontext ein JavaScript ausführt, oder es kann eine Interaktion mit einem geöffneten Devtools -Fenster sein, das an der Seite angeschlossen ist. < /P>
Es gibt auch keine Zeitlimit. Wenn Sie eine Webseite mit einem Scroll -News -Feed besuchen, den Sie stundenlang gelesen haben (ohne zu klicken), und ein JS -Ereignis zu einer neuen Seite zum Laden führte, können Sie nicht zu der Seite zurückkehren, die Sie gelesen haben. Dokumentiert?
Gibt es eine Problemumgehung? Die Antworten legen nahe, dass eine dynamisch erzeugte Einreichung versteckte Form eine potenzielle Problemumgehung ist. Ich habe festgestellt, dass dieser Ansatz keine < /em> Hilfe macht. Versuchen wir ein kurzes Gedankenexperiment: Sagen Sie, Sie suchen nach etwas bei Amazon, und die Abfrage gibt 50 Seiten Ergebnisse zurück. Angenommen, Sie wollten ein einfaches Benutzerskript erstellen, das auf der Schaltfläche "Nächste Seite" mit setTimeout ()