Некоторое время назад мне нужно было получить источник страницы через JavaScript. Эта операция очень проста. Вы можете получить его, используя Document.ReferRer. Тем не менее, в реальных приложениях все еще есть много неожиданных ситуаций, поэтому давайте кратко рассмотрим это здесь.
Первая проблема, с которой я столкнулся, заключается в том, что после перехода от страницы HTTPS на страницу HTTP значение Document.ReerRer пусто. По соображениям безопасности некоторые важные страницы многих веб -сайтов (такие как страница входа в Taobao) используют протокол HTTPS. Если пользователь, который не зарегистрирован в кликах по ссылке на страницу B (HTTP -страница) на странице A (HTTP -страница), но страница B требует Если в пути есть HTTP -страница и HTTPS -страница, то путь будет нарушен с HTTPS до HTTP.
Корень этой проблемы - политика безопасности браузера, и, похоже, нет особенно хорошего решения, чтобы положиться только на JavaScript. Идея с кольцевой развязкой состоит в том, чтобы использовать Window.name, записать URL -адрес текущей страницы в window.name на странице https, а затем прочитать его на следующей странице (HTTP -страница).
В дополнение к этой ситуации, может ли документ. Реферер будет нормально извлекать, прыгая на другие страницы? Я искал и обнаружил, что кто -то составил здесь список, но он не очень полный, например, случай IE6, который не включен. Итак, я сделал это сам, установил n браузеров в виртуальной машине и проверил все ситуации (это была действительно физическая работа), и результаты были показаны в таблице ниже:
| работать | IE6 | IE7 | IE8 | IE9 | Firefox | Хром | Опера | Сафари |
|---|---|---|---|---|---|---|---|---|
| Введите URL -адрес непосредственно в адресной панели | "" | "" | "" | "" | "" | "" | "" | "" |
| Access URL из закладки | "" | "" | "" | "" | "" | "" | "" | "" |
| Нажмите на гиперссылку со страницы A и перейдите на страницу B (target = ”_ self») | √ | √ | √ | √ | √ | √ | √ | √ |
| Нажмите на гиперссылку со страницы A и перейдите на страницу B (target = ”_ blank») | √ | √ | √ | √ | √ | √ | √ | √ |
| Щелкните правой кнопкой мыши гиперссылку со страницы A и открыть страницу B на новой вкладке | - | √ | √ | √ | √ | √ | √ | "" |
| Щелкните правой кнопкой мыши гиперссылку со страницы A и открыть страницу B в новом окне | √ | √ | √ | √ | √ | √ | √ | "" |
| Перетащите ссылку на адресную строку | "" | Невозможно перетащить | Невозможно перетащить | "" | "" | "" | "" | "" |
| Перетащите ссылку в панель вкладок | - | "" | "" | "" | "" | "" | "" | "" |
| Используйте кнопки вперед и назад и задний браузер | √ | √ | √ | √ | √ | √ | √ | √ |
| JS Modify Location.href | "" | "" | "" | √ | √ | √ | √ | √ |
| JS использует Window.open | "" | "" | "" | "" | √ | √ | √ | √ |
| Перенаправление сервера (302 прыжок) | Нацеливание на предыдущую страницу | Нацеливание на предыдущую страницу | Нацеливание на предыдущую страницу | Нацеливание на предыдущую страницу | Нацеливание на предыдущую страницу | Нацеливание на предыдущую страницу | Нацеливание на предыдущую страницу | Нацеливание на предыдущую страницу |
| Страница мета | "" | "" | "" | "" | "" | Поворотная страница | Поворотная страница | Поворотная страница |
«√» в приведенной выше таблице означает, что направление может быть извлечено нормально », - означает, что рефератель пуст.
За исключением IE, другие браузеры являются последними версиями, которые можно загрузить на официальном веб -сайте. Среди них Safari проверил как версию Windows, так и версию Mac, и вывод одинаково.
Есть также некоторые случаи, когда не было проведено никаких тестов, например, можно ли поддерживать реферат под каждым браузером при нажатии Flash, чтобы прыгать.
Большинство ситуаций в приведенной выше таблице соответствуют ожиданиям, но, кажется, есть несколько вещей, на которые можно обратить внимание:
1. В Safari щелкнуть правой кнопкой мыши, чтобы открыть ссылку, приведет к потере реферала;
2. IE, изменяя местоположение. Href или использование Window.open для открытия страницы, потеряет реферара (есть исключение в IE 9, используя местоположение. Href для прыжков не потеряет реферара);
3. При использовании Meta Jump, реферат будет потерян под IE/Firefox.
Наконец, простым выводом является: если вам нужно получить доступ к источнику через страницу коллекции Document.ReferRer, лучше не использовать JS, чтобы прыгать или открыть новое окно, а также использовать Meta для прыжков.