Mystery: Как Google поддерживает междоменную связь iframe? - PullRequest
2 голосов
/ 16 июня 2010

Когда вы размещаете элемент веб-поиска Googles на странице, создается div, который включает в себя iframe, который указывает на страницу объявлений Google AdSense.Однако, если нет объявлений для определенного запроса, Google каким-то образом изменяет класс в ВАШЕМ домене, чтобы сделать div (и iframe) невидимым.

Они НЕ используют postMessage, как это также работает в IE7.Они также не используют метод идентификатора фрагмента, так как в URL не появляется хэш.Так как они это делают?

Чтобы проверить, что я говорю, просто поместите на обычную html-страницу следующее:

<!-- Google Custom Search Element -->
<div id="cse" style="width:100%;">Loading</div>
<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript">
 google.load('search', '1');
 google.setOnLoadCallback(function(){
new google.search.CustomSearchControl().draw('cse');
 }, true);
</script>

, а затем выполните поиск по запросу «автомобили» (иливсе остальное, что определенно будет иметь рекламу), а затем для "wzxv", который не имеет рекламы ...

Ответы [ 3 ]

0 голосов
/ 16 июня 2010

Фрагмент скрипта выполняется в DOM вашей страницы, а не в рекламном фрейме. Он создает IFrame как дочерний элемент родительского div в вашем HTML и устанавливает его URL для загрузки рекламы, но, поскольку он запускается как часть вашей страницы, он также может вместо этого скрыть родительский div.

Обновление : Сценарий может легко выполнить запрос Ajax к рекламному серверу и выбрать, что делать, основываясь на ответе. На самом деле, сценарий может быть достаточно глупым, чтобы даже не заботиться об ответе, а просто отобразить его в DOM, а сервер рекламы может просто вернуть другой сценарий, который делает правильную вещь в зависимости от результата - скрывает родительский div или вводит рекламный фрейм. Черт, рекламный сервер может напрямую вернуть правильный HTML, чтобы заменить весь родительский div, если это необходимо. Все, что должен знать исходный скрипт и передавать вместе с Ajax-запросом, - это имя его родительского div, который вы передаете ему в качестве параметра.

0 голосов
/ 17 июня 2010

длина ответа - одно слово: jsonp

0 голосов
/ 16 июня 2010

Сценарий включен в ваш фрейм, поэтому он может делать с вашей страницей все, что захочет. Междоменные ограничения учитываются только для сценариев в элементах iframe, ссылающихся на внешние сценарии. google.load('search', '1'); работает в вашем фрейме, принадлежащем вашему домену, без каких-либо ограничений.

...