얼마 전, 나는 JavaScript를 통해 페이지 소스를 얻어야했습니다. 이 작업은 매우 간단합니다. document.referrer를 사용하여 얻을 수 있습니다. 그러나 실제 응용 프로그램에는 여전히 예기치 않은 상황이 많으므로 여기에 간단히 정리해 봅시다.
내가 직면 한 첫 번째 문제는 HTTPS 페이지에서 HTTP 페이지로 이동 한 후 Document.referrer의 값이 비어 있다는 것입니다. 보안상의 이유로, 많은 웹 사이트의 중요한 페이지 (예 : Taobao의 로그인 페이지)는 HTTPS 프로토콜을 사용합니다. 페이지 A (HTTP 페이지)에 대한 링크에서 클릭을 클릭하지 않은 사용자가 (http 페이지), 페이지 B 페이지는 사용자가 로그인해야하므로 로그인 한 다음 로그인 페이지 (https 페이지)로 점프 한 다음 로그인 한 후 B (HTTP 페이지)로 돌아갑니다. 그 문서를 찾을 수 없습니다. PERESRER, 경로에 HTTP 페이지와 HTTPS 페이지가있는 경우 경로는 HTTPS에서 HTTP로 고장됩니다.
이 문제의 근본 원인은 브라우저의 보안 정책이며 JavaScript만으로 의존하는 솔루션이 좋은 솔루션이없는 것 같습니다. 로터리 아이디어는 Window.Name을 사용하고 현재 페이지의 URL을 HTTPS 페이지의 Window.Name에 작성한 다음 다음 페이지 (http 페이지)에서 읽는 것입니다.
이 상황 외에도 다른 페이지를 점프하여 문서를 정상적으로 검색 할 수 있습니까? 나는 누군가가 여기에서 목록을 편집 한 것을 검색하고 발견했지만 포함되지 않은 IE6의 경우와 같이 완전하지는 않습니다. 그래서 직접 수행하고 가상 시스템에 N 브라우저를 설치하고 모든 상황을 테스트했으며 (실제로 물리적 인 작업) 결과는 아래 표에 표시되었습니다.
| 작동하다 | IE6 | IE7 | IE8 | IE9 | 파이어 폭스 | 크롬 | 오페라 | 원정 여행 |
|---|---|---|---|---|---|---|---|---|
| 주소 표시 줄에 직접 URL을 입력하십시오 | "" " | "" " | "" " | "" " | "" " | "" " | "" " | "" " |
| 북마크에서 URL에 액세스하십시오 | "" " | "" " | "" " | "" " | "" " | "" " | "" " | "" " |
| 페이지 A에서 하이퍼 링크를 클릭하고 B 페이지로 점프합니다 (Target =”_ Self”). | √ | √ | √ | √ | √ | √ | √ | √ |
| 페이지 A에서 하이퍼 링크를 클릭하고 B 페이지로 점프합니다 (Target =”_ blank”). | √ | √ | √ | √ | √ | √ | √ | √ |
| 새 탭에서 Page A에서 하이퍼 링크를 마우스 오른쪽 버튼으로 클릭하십시오. | - | √ | √ | √ | √ | √ | √ | "" " |
| 새 창에서 페이지 A에서 하이퍼 링크를 마우스 오른쪽 버튼으로 클릭하십시오. | √ | √ | √ | √ | √ | √ | √ | "" " |
| 링크를 주소 표시 줄로 드래그하십시오 | "" " | 드래그 할 수 없습니다 | 드래그 할 수 없습니다 | "" " | "" " | "" " | "" " | "" " |
| 링크를 탭 막대로 드래그하십시오 | - | "" " | "" " | "" " | "" " | "" " | "" " | "" " |
| 브라우저의 전방 및 뒤로 버튼을 사용하십시오 | √ | √ | √ | √ | √ | √ | √ | √ |
| js location.href를 수정합니다 | "" " | "" " | "" " | √ | √ | √ | √ | √ |
| JS는 Window.open을 사용합니다 | "" " | "" " | "" " | "" " | √ | √ | √ | √ |
| 서버 리디렉션 (302 점프) | 이전 페이지를 대상으로합니다 | 이전 페이지를 대상으로합니다 | 이전 페이지를 대상으로합니다 | 이전 페이지를 대상으로합니다 | 이전 페이지를 대상으로합니다 | 이전 페이지를 대상으로합니다 | 이전 페이지를 대상으로합니다 | 이전 페이지를 대상으로합니다 |
| 페이지 메타 새로 고침 | "" " | "" " | "" " | "" " | "" " | 회전 페이지 | 회전 페이지 | 회전 페이지 |
위의 표에서 "√"는 참조자가 정상적으로 검색 될 수 있음을 의미합니다. ""는 참조자가 비어 있음을 의미합니다.
IE를 제외하고 다른 브라우저는 공식 웹 사이트에서 다운로드 할 수있는 최신 버전입니다. 그 중 Safari는 Windows 버전과 Mac 버전을 모두 테스트했으며 결론은 동일합니다.
플래시를 클릭 할 때 각 브라우저 아래에 참조자를 유지할 수 있는지 여부와 같은 테스트가 수행되지 않은 경우도 있습니다.
위의 표에있는 대부분의 상황은 기대치와 일치하지만 다음에주의를 기울여야 할 몇 가지가있는 것 같습니다.
1. 사파리에서 링크를 오른쪽 클릭하면 참조자가 손실됩니다.
2. IE에서 위치를 수정하거나 Window를 사용하여 페이지를 열기 위해 열립니다. 페이지를 엽니 다. (IE 9에서는 Location.href to Jump를 사용하여 예외가있다);
3. 메타 점프를 사용하면 IE/Firefox에서는 참조자가 손실됩니다.
마지막으로, 간단한 결론은 다음과 같습니다. 문서를 통해 소스에 액세스 해야하는 경우 Referrer Collection 페이지를 사용하여 JS를 사용하여 새 창을 점프하거나 열면 메타를 사용하여 점프하는 것이 가장 좋습니다.