Google Adsense и XHTML

Vladimir
Опубликовано в: HTML

Как заставить Adsense работать на XHTML-страницах

Не секрет, что Adsense для вставки рекламы использует <iframe>. Не секрет, что для вставки этого <iframe> используется самый простой метод — document.write(). Какими же проблемами это грозит? Частично отвечая на вопрос, почему это не работает для XHTML-документов?

Сразу оговорюсь, что не работает это не для всех документов, а только для тех, которые, как и полагается XHTML-документам, выдаются с Content-Type: application/xhtml+xml.

Итак, для "настоящих XHTML-документов" возникает две проблемы:

  1. document.write() не работает;
  2. В XHTML 1.1/XHTML 1.0 Strict элемента <iframe> нет.

Основной является первая проблема. Тем не менее, даже если заменить document.write другой конструкцией (document.createElement()/document.createElementNS() + node.appendChild() или аналогичной), то в результате получим невалидный XHTML-код (который может не отображаться в валидирующих браузерах — я слышал, что это свойственно Konqueror).

Как же с этим бороться? Как уже было сказано, в современных версиях XHTML элемента <iframe> нет. Но есть другой, не менее известный элемент — <object>. Теоретически можно сохранить скрипт Google AdSense локально, изменить его, научив использовать document.createElement()/document.createElementNS() и <object> вместо <iframe>. Вот только имеет ли это смысл?

Идём дальше. Как уже было сказано выше, источник проблем здесь — специфический Content-Type (или, если смотреть глубже, кривые руки разработчиков Google — кому какой вариант нравится больше). То есть если страница будет выдаваться как, например, text/html, то AdSense будет работать. А если это соединить с <object>, то получим готовое решение.

Выглядеть это будет так: на странице, на которой должны быть объявления, вместо кода Google Adsense помещаем следующий код:

[-]
View Code HTML
    <object data="adsense.html" type="text/html"></object>

Сама же страница adsense.html будет выглядеть следующим образом:

[-]
View Code HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>Google Adsense - Disable Me in Adblock :-)</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <style type="text/css">
        html, body { margin: 0; padding: 0; border: 0; }
    </style>
</head>
<body>
    <script type="text/javascript">//<!--
       google_ad_client = "pub-5756520316076607";
       google_ad_slot = "5162144530";
       google_ad_width = 468;
       google_ad_height = 60;
   //-->
    </script>
    <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</body>
</html>

Разумеется, следует использовать свои параметры AdSense.

Если сервер настроен выдавать статические .html-страницы с Content-Type: application/xhtml+xml (или любым другим, кроме text/html), то это, разумеется, надо поправить (как именно — зависит от сервера). Например, для Apache это может выглядеть следующим образом (предполагается, что эти строки будут добавлены в файл .htaccess, находящийся в том же каталоге, что и adsense.html):

[-]
View Code Apache configuration
<Files adsense.html>
    ForceType text/html
</Files>

Update: мне всё же интересно, будут ли объявления в этом случае контекстно-зависимыми? Ведь по большому счету, referer'ом скрипта http://pagead2.googlesyndication.com/pagead/show_ads.js будет страница adsense.html, а не та, на которой эта реклама должна отображаться… И проверить из-за проблем с аккаунтом не могу

Update: Stu Nicholls нашел еще одну скрытую ошибку: дело в том, что при нажатии на ссылку в рекламном блоке, Internet Explorer откроет её не в главном окне (как это должно быть), а внутри тэга <object>.

Stu Nicholls предлагает следующее решение проблемы: использовать условные комментарии для того, чтобы не использовать <object> в IE (в любом случае, IE пока не понимает application/xhtml+xml, так что использование небольшого хака для IE не будет критичным). Я немного изменил предложенный код так, чтобы IE вообще не видел тэг <object> (нечто подобное было сделано в статье "Кросс-браузерное одноуровневое вертикальное меню без JavaScript")

[-]
View Code HTML
<!--[if gt IE 8]><!-->
   <object data="adsense.html" type="text/html"></object>
<!--<![endif]-->
<!--[if lte IE 8]>
   <script type="text/javascript">
       google_ad_client = "pub-5756520316076607";
       google_ad_slot = "5162144530";
       google_ad_width = 468;
       google_ad_height = 60;
   </script>
   <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<![endif]-->
Добавить в закладки
  • del.ici.ous
  • Digg
  • Furl
  • Google
  • Simpy
  • Spurl
  • Y! MyWeb
  • БобрДобр
  • Мистер Вонг
  • Yandex.Закладки
  • Текст 2.0
  • News2
  • AddScoop
  • RuSpace
  • RUmarkz
  • Memori
  • Google Bookmarks
  • Писали
  • СМИ 2
  • Моё Место
  • 100 Закладок
  • Ваау!
  • Technorati
  • RuCity
  • LinkStore
  • NewsLand
  • Lopas
  • Закладки - IN.UA
  • Connotea
  • Bibsonomy
  • Trucking Bookmarks
  • Communizm
  • UCA
  • Slashdot
  • Magnolia
  • Blogmarks
  • Current
  • Meneame
  • Oknotizie
  • Diigo
  • Funp
  • Hugg
  • Dealspl.us
  • N4G
  • Mister Wong
  • Faves
  • Yigg
  • Fresqui
  • Care2
  • Kirtsy
  • Sphinn
  • SaveThis.ru

Связанные записи

2
Апр
2008

Комментарии к статье «Google Adsense и XHTML»  »

К статье «Google Adsense и XHTML» комментариев пока нет. Не хотите ли стать первым?

Подписаться на RSS-ленту комментариев к статье «Google Adsense и XHTML» Trackback URL: http://blog.sjinks.org.ua/html/67-google-adsense-and-xhtml/trackback/

Оставить комментарий к записи «Google Adsense и XHTML»

Вы можете использовать данные тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, Вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя