понедельник, ноября 26, 2007

что может быть хуже чем показывать и смотреть рекламу? отлавливать в ней ошибки!

повесили на один сайт google adsense. в мозилле, опере всё пучком, а ИЕ что-то кортачится - ничего не показывает кроме ошибок: "незавершённая строковая константа" и "недопустимый символ". в качестве адреса указывает нашу страницу. номер строки и символа - циркулирует между пятком вариантов.

если бы эта проблема наблюдалась только в мозилле - я бы взял огнебаг, да отдебажил по самое небалуйся, но под ИЕ, к сожалению, ничего подобного нет (-_-) причём ошибка выскакивала только в шестом ИЕ. седьмой же - не возникал и спосойно отображал рекламу. правда русские буквы он отображал исключительно вопросительными знаками. сначала я не обратил на это особого внимания, но как потом оказалось - зря.

страницы у нас отдаются в utf-8, но гугол свою рекламу почему-то отдаёт в windows-1251. подозреваю он определяет язык (по региону или по http-заголовку, не суть в общем) в соответствии с ним отбирает объявления (из 6 ссылок 1-2 на русском языке) и по неизвестной причине выбирает кодировку 1251. ие в заголовках её не запрашивает, исходная страница в utf-8, видимо гугол просто для русского языка по дефолту шлёт 1251 и тем самым совершенно не учитывает поведение детища мелкософта - эта мохнатая скотина плевать хотела на http-заголовки подгружаемого яваскрипта. ие при загрузке скриптов и стилей устанавливает для них ту же кодировку, что и на странице для которой они загружаются. как следствие, ие думал, что подгружаемый гуглоскрипт с рекламными данными был в кодировке utf-8 и встретив там русские буквы, которые не входят в ASCII-7, получал совершенно невообразимые коды символов.

как обойти такое поведение ИЕ? да очень просто! есть два варианта:
1. отдавать скрипты в той же кодировке, что и исходная страница.
2. указать в тэге <script> атрибут charset содержащий код нужной кодировки.
если меня читают товарищи из гугла, то в этот их скрипт нужно добавить:
document.write('<script language="JavaScript1.1" 
charset="windows-1251" src="'+c+'"><\/script>')
естественно вместо "windows-1251" нужно подставить ту кодировку в которой собираемся грузить данные.

да, и отдельное спасибо за то, что мне пришлось копаться в этой лапше (-_-)

1 комментарий:

Анонимный комментирует...

Ответы практически на любой вопрос есть у нас. SEEXi.NET
Так же интерес можно проявить на пример к "[url=http://www.2nt.ru/go/teets.php]Красотка нашла то что искала [/url]"
А любителям [url=http://seexi.net/geyi.php]гей видео[/url] подарок.