Объявления Google не отображаются в IE8 - PullRequest
1 голос
/ 06 января 2012

У меня странная проблема, Google Ads (DFP) не показывается для IE8 (не тестируется для IE ниже 8).

Я использую следующий код (используется jQuery).

/*-- Advertizing --*/
var googletag = googletag || {};
googletag.cmd = googletag.cmd || [];
(function(){
    var script = $('<{0}></{0}>'.format('script'));
    script.attr('type','text/javascript');
    script.attr('async','async');
    script.attr('src',document.location.protocol + '//www.googletagservices.com/tag/js/gpt.js');
    $('head').eq(0).prepend(script);

    googletag.cmd.push(function() {
        googletag.defineSlot('/1016203/PG_194x662_Async', [194, 662], 'div-gpt-ad-1320434986666-0').addService(googletag.pubads());
        googletag.defineSlot('/1016203/PG_530x99_Async', [530, 99], 'div-gpt-ad-1320435053303-0').addService(googletag.pubads());
        googletag.defineSlot('/1016203/PG_530x50_Async', [530, 50], 'div-gpt-ad-1320435026691-0').addService(googletag.pubads());
        googletag.pubads().enableSingleRequest();
        googletag.enableServices();
    });
    googletag.cmd.push(function () { googletag.display('div-gpt-ad-1320434986666-0'); });
    googletag.cmd.push(function () { googletag.display('div-gpt-ad-1320435053303-0'); });
    googletag.cmd.push(function () { googletag.display('div-gpt-ad-1320435026691-0'); });       
}());

Это проверено и работает корректно в IE9, Chrome, Firefox ... Но IE8 - это нечетный выход.Сайт работает по адресу photogallery.classiccars.com .Из дерева DOM выглядит почти так, что один IFrame частично загружен в IE8, но просто выпадает.

1 Ответ

2 голосов
/ 06 января 2012

Код Google использует for (var x in array), что имеет проблемы в некоторых браузерах при расширении Array.prototype.

Почему они не используют свойство .length для итерации или проверка hasOwnProperty мне не подходит, но это, кажется, проблема под рукой.

Поскольку Backbone.js включено в проект, который требует Underscore.js , я корректирую кодовую базуиспользовать для проекта служебные методы из Underscore.js .

//instead of an ES5-Shim extension to Array.prototype.filter (for example)
var ary = [...];

//instead of this...
var results = ary.filter(function(item){...}); //es5

//use this
var results = _.filter(ary, function(item){...}); //underscore.js

Примечание для всех, кто пишет JavaScript, избегайте использования for..in, если вы явно не проверяете hasOwnProperty.Это относится как к массивам, так и к объектам.

var ary = [...];
for (var x in ary) {
    if (!ary.hasOwnProperty(x)) continue; //skip inherited properties.

    //your handling here
    ...
}
...