神秘:Google如何进行跨域iframe通信?

时间:2010-06-15 21:55:44

标签: iframe cross-domain

当您在网页上托管Googles网络搜索元素时,会创建一个div,其中包含一个指向Google adsense广告页面的iframe。但是,如果没有针对特定查询的广告,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 :(得分:0)

该脚本包含在您的框架中,因此它可以随意对您的页面进行操作。跨域限制仅计算iframe中的脚本引用外部域中的外部脚本中的内容。 google.load('search', '1');在您的相框中运行,由您的域名拥有,不受任何限制。

答案 1 :(得分:0)

脚本片段在您网页的DOM中执行,而不是在广告IFrame中执行。它将IFrame创建为HTML中父div的子元素,并将其URL设置为加载广告,但由于它作为页面的一部分运行,因此它也可以选择隐藏父div。

更新:脚本可以轻松地向广告服务器运行Ajax查询,并根据响应选择要执行的操作。事实上,脚本可能很愚蠢,甚至不关心响应,只是在DOM中呈现它,广告服务器可以根据结果返回另一个执行正确操作的脚本 - 隐藏父div或者注入广告iframe。哎呀,如果需要,广告服务器可以直接返回正确的HTML来替换整个父div。所有初始脚本需要知道并传递Ajax查询是其父div的名称,您将其作为参数传递给它。

答案 2 :(得分:-1)

答案是单词lenght:jsonp