超越起点 追随自由 我想故我所有

我看不见,我的明天,但今天,绝不重复昨天;顺风是滑翔,逆风才是飞翔,火烧过才能化凤凰!总想对你表白,我的心情是多么豪迈
总想对你倾诉,我对生活是多么热爱

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

为什么AdSense不能在真正的XHTML中工作?

  为什么AdSense不能在真正的XHTML中工作?

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

  主要问题出在JavaScript。Document.Write()不会在正确伺服的由一个XML解析器处理的XML页面中工作。Ian Hickson给出了为什么会这样的理由(中文版本站已经翻译:为什么document.write在XML中不工作)。就如我们所觉察到的, 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>

  对于使用这个分离内容和MIME内容脚本来同时伺服application/xhtml+xml和text/html的站长,最好能够利用已经存在的代码来决定这两种不同的方法的采用。在原始的分离内容和MIME内容脚本中,MIME类型由$mime变量来保存。如果该变量的值是 “application/xhtml+xml”,则可以在文档中使用object。否则,则把标准AdSense的JavaScript包含进来。下面的脚本演示这是如何做到的:


<div class="ads">
    
<?php if($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, Firefox 0.92和Opera 7.0中测试通过。

文章出处: http://neoone.51.net/tech/adsense.php

posted on 2005-01-08 10:44  爆牙齿  阅读(461)  评论(0)    收藏  举报