Maison > Article > interface Web > Document.referrer dans les résultats des tests JavaScript dans divers navigateurs_Connaissances de base
Il y a quelque temps, nous devions récupérer le 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 pratiques, qui sont brièvement résumées ici.
Le premier problème rencontré est qu'après le passage 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 non connecté clique sur le lien vers la page B (page HTTP) sur la page A (page HTTP), mais que la page B demande à l'utilisateur de se connecter, il passera d'abord à la page de connexion (page HTTPS), et puis revenez à B une fois la connexion terminée (page HTTP), vous constaterez alors que document.referrer ne peut pas être obtenu sur la page B. En d'autres termes, si vous souhaitez restaurer le chemin d'accès utilisateur en fonction du référent, s'il y a des pages HTTP et des pages HTTPS dans le chemin, alors le chemin sera rompu de HTTPS à HTTP.
La cause première de ce problème est la politique de sécurité du navigateur. Il ne semble pas y avoir de solution particulièrement efficace utilisant JavaScript seul. Une idée détournée consiste à utiliser window.name, à écrire l'URL de la page actuelle dans window.name sur la page HTTPS, puis à la lire sur la page suivante (page HTTP).
En dehors de cette situation, le document.referrer peut-il être obtenu normalement en passant à d'autres pages ? J'ai cherché et trouvé ici que quelqu'un avait compilé une liste, mais elle n'était pas exhaustive, par exemple, elle n'incluait pas IE6 mourant. Je l'ai donc fait moi-même, installé N navigateurs dans la machine virtuelle et testé diverses situations (c'est vraiment un travail physique). Les résultats sont présentés dans le tableau ci-dessous :
.
操作 | IE6 | IE7 | IE8 | IE9 | Firefox | Chrome | Opera | Safari |
---|---|---|---|---|---|---|---|---|
直接在地址栏输入URL | “” | “” | “” | “” | “” | “” | “” | “” |
从书签访问URL | “” | “” | “” | “” | “” | “” | “” | “” |
从页面A点击超链接,跳转到页面B(target=”_self”) | √ | √ | √ | √ | √ | √ | √ | √ |
从页面A点击超链接,跳转到页面B(target=”_blank”) | √ | √ | √ | √ | √ | √ | √ | √ |
从页面A右键单击超链接,在新标签页中打开页面B | - | √ | √ | √ | √ | √ | √ | “” |
从页面A右键单击超链接,在新窗口中打开页面B | √ | √ | √ | √ | √ | √ | √ | “” |
拖动链接到地址栏 | “” | 无法拖动 | 无法拖动 | “” | “” | “” | “” | “” |
拖动链接到标签栏 | - | “” | “” | “” | “” | “” | “” | “” |
使用浏览器的前进、后退按钮 | √ | √ | √ | √ | √ | √ | √ | √ |
JS 修改 location.href | “” | “” | “” | √ | √ | √ | √ | √ |
JS 使用 window.open | “” | “” | “” | “” | √ | √ | √ | √ |
服务器重定向(302跳转) | 定向之前的页面 | 定向之前的页面 | 定向之前的页面 | 定向之前的页面 | 定向之前的页面 | 定向之前的页面 | 定向之前的页面 | 定向之前的页面 |
页面 Meta Refresh | “” | “” | “” | “” | “” | 转向页 | 转向页 | 转向页 |
"√" dans le tableau ci-dessus signifie que le référent peut être obtenu normalement, "" signifie que le référent est vide.
À l'exception d'IE, tous les autres navigateurs sont les dernières versions téléchargeables sur le site officiel. Safari a testé à la fois la version Windows et la version Mac, et la conclusion est la même.
Il existe également certaines situations qui n'ont pas été testées, comme par exemple si le référent peut être conservé dans chaque navigateur lorsque vous cliquez sur Flash pour sauter.
La plupart des situations présentées dans le tableau ci-dessus sont conformes aux attentes, mais il semble y avoir quelques points qui nécessitent une attention particulière :
1. Dans Safari, lorsque vous cliquez avec le bouton droit pour ouvrir un lien, le référent sera perdu
;
2. Dans IE, le référent sera perdu lors de la modification de location.href ou de l'utilisation de window.open pour ouvrir la page (IE 9 est une exception, l'utilisation de location.href pour sauter ne perdra pas le référent
) ;
3. Lors de l'utilisation du méta-saut, le référent sera perdu sous IE/Firefox.
Enfin, une conclusion simple est la suivante : 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 d'utiliser méta pour sauter.