以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 Google 广告(AdSense/AdWords) 』   (http://bbs.xml.org.cn/list.asp?boardid=52)
----  [转帖]使Google广告AdSense在XHTML中工作  (http://bbs.xml.org.cn/dispbbs.asp?boardid=52&rootid=&id=15263)


--  作者:admin
--  发布时间:3/9/2005 12:03:00 AM

--  [转帖]使Google广告AdSense在XHTML中工作
转载自:http://neoone.51.net/tech/adsense.php

[URL=http://neoone.51.net/]主页[/URL] > [URL=http://neoone.51.net/tech/]设计与技术[/URL] > [URL=http://neoone.51.net/tech/adsense.php]使Google广告AdSense在XHTML中工作[/URL]

翻译手记
我开始使用XHTML 1.1的时候,发现Google的AdSense广告在IE上正常,在Firefox和Opera中则一片空白,纳闷,对着代码检查了良久,终究无法得知问题于何处。幸亏还有Google,我终于找到这个解决方案。我也不能不说,推广标准,还真的是任重道远,连Google都无法保证它的代码会在任何的(X)HTML上工作。

这其实是一个JavaScript的问题,假如你发现你在XHTML 1.0 Stric或者XHTML 1.1中无法使用JavaScript的调用,或许,这篇文章对你也有启示。

为什么AdSense不能在真正的XHTML中工作?
Google的AdSense使用JavaScript生成一个iframe来动态地发送广告。如果页面是使用常规的HTML或者不严格版本的XHTML,以text/html来伺服的话,没有任何问题。这个JavaScript如你所愿地生成iframe,任何事情都工作得很好。不幸的是,对于站长以application/xhtml+xml来伺服的XHTML,Google的方法不能工作。

主要问题出在JavaScript。Document.Write()不会在正确伺服的由一个XML解析器处理的XML页面中工作。Ian Hickson给出了为什么会这样的[URL=http://ln.hixie.ch/?start=1091626816&count=1]理由[/URL](中文版本站已经翻译:[URL=http://neoone.51.net/tech/dw_not_work.php]为什么document.write在XML中不工作[/URL])。就如我们所觉察到的,Document.Write()用来生成iframe,因此,Google的广告永远不会出现。

第二个问题在于iframe本身。这个元素没有出现在任何严格的XHTML版本中,所以尽管JavaScript可以生成,iframe会使这个页面的XHTML不合法。

怎么才能使它工作呢?
解决这些问题的一条途径是,简单地以text/html来伺服AdSense代码。为达到目的,有必要创建一个独立的网页,使用text/html的MIME类型,然后以object的形式插入到需要的页面中。下面是一个独立的文档的样例:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html lang="en"><head><title>Sponsorship</title><style type="text/css">body { margin: 0; padding: 0; }</style></head><body><script type="text/javascript">这里是Google AdSense的参数</script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script></body></html>
对于使用这个[URL=http://neoone.51.net/tech/mime_type.php]分离内容和MIME内容脚本[/URL]来同时伺服application/xhtml+xml和text/html的站长,最好能够利用已经存在的代码来决定这两种不同的方法的采用。在原始的分离内容和MIME内容脚本中,MIME类型由$mime变量来保存。如果该变量的值是“application/xhtml+xml”,则可以在文档中使用object。否则,则把标准AdSense的JavaScript包含进来。下面的脚本演示这是如何做到的:

<div class="ads"><?phpif($mime == "application/xhtml+xml") { print " <object data=\"/includes/google.php\" type=\"text/html\"></object>\n";} else {?><script type="text/javascript"> 这里是Google AdSense的参数 </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script><?php}?></div>
这个解决方案业已在IE 6, [URL=http://www.spreadfirefox.com/?q=affiliates&id=38491&t=72]Firefox[/URL] 0.92和Opera 7.0中测试通过。

延伸阅读
[URL=http://neoone.51.net/tech/dw_not_work.php]为什么document.write在XML中不工作[/URL],这是AdSense不工作的根本原因。
[URL=http://neoone.51.net/tech/mime_type.php]使用正确的MIME类型伺服XHTML[/URL]
原文:[URL=http://keystonewebsites.com/articles/adsense.php]Making AdSense work with XHTML[/URL],[URL=http://keystonewebsites.com/]Keystone Websites[/URL]
除非特别声明,本站所有翻译文章都以[URL=http://www.creativecommons.cn/licenses/by-nc-sa/1.0/]创作共用[/URL]授权。原文版权归作者所有,如有转摘请注明原作者以及译者信息。
[URL=http://neoone.51.net/tech/adsense.php#header]跳到头部[/URL]


--  作者:myha.net
--  发布时间:3/10/2005 3:33:00 PM

--  
真的可以吗?
--  作者:alpar
--  发布时间:3/17/2005 11:33:00 AM

--  
高!又学了一招了!!

     


    


  
   

按此在新窗口浏览图片


--  作者:zdream001
--  发布时间:4/8/2005 11:18:00 PM

--  
今天才看到这个,晚了,唉。
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
171.875ms