Как vimeo / youtube и т. Д. Получают URL-адрес реферера в своих фреймах?
Озадачен огромным количеством ответов и проблем на эту тему.
Теперь я принимаю ситуацию безопасности JS, запрещающую междоменный доступ из iFrame к оконным окнам / страницам контейнера, но идеальные разрешения, упомянутые в многочисленных статьях Идентификаторов фрагментов или postMessage API, действительно ставят в тупик.
То, что я хочу сделать, это повторить то, что Vimeo, кажется, снял; их новый код для вставки iframe
<iframe src="http://player.vimeo.com/video/17263117" width="400" height="225" frameborder="0"></iframe>
Использует http://a.vimeocdn.com/js/player_combined.opt.js?8ba54 и, по-видимому, может заполнить URL-адрес реферера в источнике iframe со страницы родительской загрузки. Т.е. www.donkey.com/myvideo.html вставляется на страницу http://player.vimeo.com/video/17263117. Обычно, с блоками безопасности на JS это невозможно с простым parent.location.href. Итак, я посмотрел на это и начал действительно дикую погоню за гусем, чтобы найти, как это можно сделать.
Я пытался понять их JS и играл с PostMessage API, но мне нечего показать. Любое руководство очень приветствуется.
1 ответ
Это не нужно, чтобы получить это от <iframe>
источник вообще (ограничения безопасности предотвращают это, как вы уже заметили), он передается на сервер в виде заголовка и отображается на странице их сервером для использования JavaScript, посмотрите на options
переменная, определенная на странице.
Давайте рассмотрим пример здесь: http://www.jsfiddle.net/nick_craver/FfuPk/
Если вы посмотрите на запрос к http://player.vimeo.com/video/17263117,
Вы увидите, что реферер получен:
Referer: http://fiddle.jshell.net/nick_craver/FfuPk/show/light/
В блоке скрипта на странице, загруженной iframe, вы увидите:
var options = {config: {
//....
"referrer":"http:\/\/fiddle.jshell.net\/nick_craver\/FfuPk\/show\/light\/"
//....
};
Так вот как он получает реферер, в конечном итоге из заголовка, отправляемого вашим браузером на сервер.