谜团:谷歌如何进行跨域iframe通信?

谜团:谷歌如何进行跨域iframe通信?,iframe,cross-domain,Iframe,Cross Domain,当你在一个页面上托管Google网页搜索元素时,就会创建一个div,其中包含一个指向Google adsense广告页面的iframe。但是,如果没有特定查询的广告,Google会以某种方式更改域上的类,以使div(和iframe)不可见 他们没有使用postMessage,因为它在IE7中也可以使用。他们也没有使用片段标识符方法,因为url中没有出现哈希。那么他们是如何做到的呢 要检查我所说的内容,只需将以下内容放入常规html页面: <!-- Google Custom Search

当你在一个页面上托管Google网页搜索元素时,就会创建一个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>

加载
load('search','1');
setOnLoadCallback(函数(){
新的google.search.CustomSearchControl().draw('cse');
},对);

然后搜索“汽车”(或任何其他肯定会有广告的东西),然后搜索“wzxv”,它没有广告。

脚本包含在您的框架中,因此它可以对您的页面执行任何想要的操作。跨域限制仅适用于iFrame中的脚本引用来自外部域的外部脚本中的内容<代码>google.load('search','1')在您的框架中运行,由您的域所有,不受任何限制。

脚本包含在您的框架中,因此它可以对您的页面执行任何需要的操作。跨域限制仅适用于iFrame中的脚本引用来自外部域的外部脚本中的内容<代码>google.load('search','1')在您的框架中运行,由您的域所有,不受任何限制。

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


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

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


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

答案是一个单词lengh:jsonp

答案是一个单词lengh:jsonp

Franci,问题是,为了隐藏父div,它需要知道iframe中没有广告!我的问题是,它怎么知道…?Franci,问题是,为了隐藏父div,它需要知道iframe中没有广告!我的问题是,它是如何知道的…?正如我在给Franci的回复中所写的,问题是为了隐藏div,它需要访问iframe网页(它位于另一个域!)以查看没有广告。它是如何做到的?为什么?它可以简单地询问谷歌服务器将来是否希望在iframe中显示广告,而根本不创建iframe。正如我在给Franci的回复中所写,问题是为了隐藏div,它需要访问iframe网页(位于不同的域上!)看到没有广告。它是怎么做到的?为什么?它可以简单地询问谷歌服务器将来是否希望在iframe中显示广告,而根本不创建iframe。你有没有想到答案?思想分享?你有没有想到答案?思想分享?你花了不止一个词来给出一个词的答案。这意味着你可以给出更多的细节。你花了不止一个词来给出一个词的答案。这表明你可以提供更多的细节。