2008年8月7日星期四

为什么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

没有评论:

免责声明

1、本人是文盲,以上内容文字均不认识,也看不懂是什么意思(包括但不限于对所以上之内容的识别、阅读、理解、分析、记忆等);

2、本人过去、现在以及将来都不认识本文中提及当事人,且自古以来与该相对人无利益关系;

3、本人昨天、今天以及明天都没有或者不准备去本文所述地点。本文表述之事与本人无关。

4、本人在此发文(包括但不限于汉字、拼音、拉丁字母、斯拉夫字母、日语假名、阿拉伯字母、单词、句子、图片、影像、录音、以及前述之各种任意组合等等)均为随意敲击键盘所出,用于检验本人电脑键盘录入、屏幕显示的机械、光电性能,并不代表本人局部或全部同意、支持或者反对文中观点。如需要详查请直接与键盘发明者及生产厂商法人代表联系;

5、人生有风险,上网需谨慎。本文不暗示、鼓励、支持或映射读者作出生活方式、工作态度、婚姻交友、股票债券买卖、子女教育的积极或消极判断。未成年人请在监护人陪同下阅读本文。无完全民事行为能力者,请立即关闭网页,并用20%高锰酸钾+75%乙醇对键盘、硬盘、电压插座、显示器、鼠标、cpu进行灌溉消毒;

6、如本人留言违反国家有关法律,请网络管理员及时删除本文,本人保留继续发文的权利;

7、因删贴不及时所产生的任何法律(包括宪法、加法、减法、乘法、除法、剑法、拳法、脚法、指法、民法、刑法、书法、公检法、基本法、劳动法、婚姻法、输入法、没办法、国际法、今日说法、吸星大法及文中涉及或可能涉及以及未涉及之法,各地治安管理条例)纠纷或责任本人概不负责;

8、本人谢绝任何跨省(包括但不限于跨国、跨洲、跨星球、跨星系)追捕行为。确因不抓不足以平民愤,或不抓就领不到薪水养家户口的公职人员,建议携带工作证、身份证、结婚证/离婚证、独生子女证、健康证、暂住证、毕业证、边防证、县以上政府机关出具的介绍信温情操作。抓捕按照以下排序倒序:作者、原作者以及网络管理员以及网络运行商、电信运营商、电力供应商、电脑生产销售商;

9、如回复内容导致回复者或第三方、第四方、第N次方怀孕,本人愿配合做亲子鉴定。