Il y a quelque temps, je devais obtenir la source de la page via JavaScript. Cette opération est très simple. Vous pouvez l'obtenir en utilisant Document.Referrer. Cependant, il existe encore de nombreuses situations inattendues dans les applications réelles, alors triez-le brièvement ici.
Le premier problème que j'ai rencontré est qu'après passer de la page HTTPS à la page HTTP, la valeur de Document.Referrer est vide. Pour des raisons de sécurité, certaines pages importantes de nombreux sites Web (comme la page de connexion de Taobao) utilisent le protocole HTTPS. Si un utilisateur qui n'est pas connecté aux clics sur le lien vers la page B (page http) à la page A (page http), mais que la page B exige que l'utilisateur se connecte, alors il saute sur la page de connexion (page https), puis remonte à B (page HTTP) après la connexion, si vous souhaitez que l'utilisateur ne puisse pas être récupéré sur la page B. En d'autres termes, si vous voulez que l'utilisateur ne puisse pas être récupéré sur la page B. En d'autres termes, si vous voulez que l'utilisateur ne puisse pas être récupéré sur la page B. En d'autres termes, si vous voulez que l'utilisateur accéde à la traject Renvoi, s'il y a une page HTTP et une page HTTPS dans le chemin, le chemin sera cassé de HTTPS à HTTP.
La racine de ce problème est la politique de sécurité du navigateur, et il ne semble pas y avoir de solution particulièrement bonne pour s'appuyer uniquement sur JavaScript. Une idée de rond-point consiste à utiliser Window.name, écrivez l'URL de la page actuelle dans Window.name sur la page HTTPS, puis lisez-la sur la page suivante (page HTTP).
En plus de cette situation, le document.Referrer peut-il être récupéré normalement en sautant d'autres pages? J'ai cherché et trouvé que quelqu'un avait compilé une liste ici, mais ce n'est pas très complet, comme le cas d'IE6 qui n'est pas inclus. Je l'ai donc fait moi-même, installé n navigateurs dans la machine virtuelle et testé toutes les situations (c'était vraiment un travail physique), et les résultats ont été montrés dans le tableau ci-dessous:
| fonctionner | IE6 | IE7 | IE8 | IE9 | Incendier | Chrome | Opéra | Safari |
|---|---|---|---|---|---|---|---|---|
| Entrez l'URL directement dans la barre d'adresse | "" | "" | "" | "" | "" | "" | "" | "" |
| URL d'accès à partir de signets | "" | "" | "" | "" | "" | "" | "" | "" |
| Cliquez sur l'hyperlien à partir de la page A et passez à la page B (cible = ”_ self”) | √ | √ | √ | √ | √ | √ | √ | √ |
| Cliquez sur l'hyperlien à partir de la page A et passez à la page B (Target = ”_ Blank”) | √ | √ | √ | √ | √ | √ | √ | √ |
| Cliquez avec le bouton droit sur l'hyperlien à partir de la page A et de la page ouverte B dans un nouvel onglet | - | √ | √ | √ | √ | √ | √ | "" |
| Cliquez avec le bouton droit sur l'hyperlien à partir de la page A et l'ouverture de la page B dans une nouvelle fenêtre | √ | √ | √ | √ | √ | √ | √ | "" |
| Faites glisser le lien vers la barre d'adresse | "" | Impossible de traîner | Impossible de traîner | "" | "" | "" | "" | "" |
| Faites glisser le lien vers la barre d'onglet | - | "" | "" | "" | "" | "" | "" | "" |
| Utilisez les boutons avant et arrière du navigateur | √ | √ | √ | √ | √ | √ | √ | √ |
| Js modifier l'emplacement.href | "" | "" | "" | √ | √ | √ | √ | √ |
| JS utilise Window.Open | "" | "" | "" | "" | √ | √ | √ | √ |
| Redirection du serveur (302 Jump) | Cibler la page précédente | Cibler la page précédente | Cibler la page précédente | Cibler la page précédente | Cibler la page précédente | Cibler la page précédente | Cibler la page précédente | Cibler la page précédente |
| Page Meta Refresh | "" | "" | "" | "" | "" | Page de tournage | Page de tournage | Page de tournage |
Le "√" dans le tableau ci-dessus signifie que le référent peut être récupéré normalement "," "signifie que le référent est vide.
À l'exception de IE, d'autres navigateurs sont les dernières versions qui peuvent être téléchargées sur le site officiel. Parmi eux, Safari a testé à la fois la version Windows et la version Mac, et la conclusion est la même.
Il y a aussi certains cas où aucun test n'a été effectué, par exemple si le référence peut être maintenu sous chaque navigateur lors du clic Flash pour sauter.
La plupart des situations dans le tableau ci-dessus sont conformes aux attentes, mais il semble y avoir plusieurs choses auxquelles faire attention:
1. Dans Safari, le clic droit pour ouvrir le lien entraînera la perte du référente;
2. Dans IE, modifier l'emplacement.href ou utiliser Window.open pour ouvrir la page perdra le référence (il y a une exception dans IE 9, en utilisant l'emplacement.href pour sauter ne perdra pas le référence);
3. Lors de l'utilisation de Meta Jump, le référent sera perdu sous IE / Firefox.
Enfin, une conclusion simple est: si vous devez accéder à la source via la page de collection document.Referrer, il est préférable de ne pas utiliser JS pour sauter ou ouvrir une nouvelle fenêtre, ni utiliser Meta pour sauter.