Как vimeo / youtube и т. Д. Получают URL-адрес реферера в своих фреймах? - PullRequest
1 голос
/ 30 ноября 2010

Озадачен огромным количеством ответов и проблем на эту тему.

Теперь я принимаю ситуацию безопасности 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 Ответ

4 голосов
/ 30 ноября 2010

Ему вообще не нужно получать его из источника <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\/"
               //....
              };

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

...