Как 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\/"
               //....
              };

Так вот как он получает реферер, в конечном итоге из заголовка, отправляемого вашим браузером на сервер.

Другие вопросы по тегам