>  기사  >  웹 프론트엔드  >  JavaScript 테스트의 Document.referrer는 다양한 브라우저에서 발생합니다_기본 지식

JavaScript 테스트의 Document.referrer는 다양한 브라우저에서 발생합니다_기본 지식

WBOY
WBOY원래의
2016-05-16 16:41:431339검색

얼마 전에는 JavaScript를 통해 페이지 소스를 가져와야 했습니다. 이 작업은 document.referrer를 사용하면 매우 간단합니다. 그러나 실제 적용에서는 여전히 예상치 못한 상황이 많이 발생하는데, 이에 대해 간략하게 요약해 보겠습니다.

첫 번째 문제는 HTTPS 페이지에서 HTTP 페이지로 전환한 후 document.referrer의 값이 비어 있다는 것입니다. 보안상의 이유로 많은 웹사이트의 일부 중요한 페이지(예: Taobao의 로그인 페이지)에서는 HTTPS 프로토콜을 사용합니다. 로그인하지 않은 사용자가 페이지 A(HTTP 페이지)에서 B 페이지(HTTP 페이지)에 대한 링크를 클릭했지만 페이지 B에서 사용자 로그인을 요구하는 경우 먼저 로그인 페이지(HTTPS 페이지)로 이동한 다음, 로그인이 완료된 후 B로 다시 이동하면(HTTP 페이지) 페이지 B에서 document.referrer를 얻을 수 없다는 것을 알 수 있습니다. 즉, 리퍼러를 기준으로 사용자 액세스 경로를 복원하려는 경우 경로에 HTTP 페이지와 HTTPS 페이지가 있으면 경로가 HTTPS에서 HTTP로 끊어집니다.

이 문제의 근본 원인은 브라우저의 보안 정책 때문인 것 같습니다. JavaScript만으로는 특별히 좋은 해결책은 없는 것 같습니다. 우회적인 아이디어는 window.name을 사용하고 현재 페이지의 URL을 HTTPS 페이지의 window.name에 쓴 후 다음 페이지(HTTP 페이지)에서 읽는 것입니다.

이 경우를 제외하고 다른 페이지로 이동할 때 document.referrer를 정상적으로 얻을 수 있나요? 여기를 검색해 보니 누군가가 목록을 작성했지만 포괄적이지 않았습니다. 예를 들어 죽어가는 IE6이 포함되지 않았습니다. 그래서 제가 직접 해본 결과, 가상 머신에 N 브라우저를 설치하고, 다양한 상황을 테스트해봤습니다(실제로는 물리적인 작업입니다). 결과는 아래 표와 같습니다.

操作 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 “” “” “” “” “” 转向页 转向页 转向页

위 표에서 "√"는 리퍼러를 정상적으로 얻을 수 있다는 의미이고, ""는 리퍼러가 비어 있다는 의미입니다.

IE를 제외한 나머지 브라우저는 모두 공식 홈페이지에서 다운로드 가능한 최신 버전이다. 사파리는 윈도우 버전과 맥 버전 모두 테스트를 했고 결론은 같다.

플래시를 클릭하여 점프할 때 각 브라우저에서 리퍼러를 유지할 수 있는지 여부 등 테스트되지 않은 상황도 있습니다.

위 표의 상황은 대부분 기대에 부합하지만 주의가 필요한 부분도 몇 가지 있는 것 같습니다.

1. Safari에서 마우스 오른쪽 버튼을 클릭하여 링크를 열면 참조 페이지가 사라집니다.
2. IE에서는 location.href를 수정하거나 window.open을 사용하여 페이지를 열 때 리퍼러가 손실됩니다(IE 9는 예외이며 location.href를 사용하여 점프해도 리퍼러는 손실되지 않습니다). 3. 메타 점프를 사용하면 IE/Firefox에서 리퍼러가 손실됩니다.

마지막으로 간단한 결론은: document.referrer 컬렉션 페이지를 통해 소스에 액세스해야 하는 경우 JS를 사용하여 점프하거나 새 창을 열거나 메타를 사용하여 점프하지 않는 것이 가장 좋습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.