2012-01-05 3 views
1

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

Я использую следующий код (используется 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, но просто выпадает.

ответ

2

Код 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 
    ... 
}
+0

Не могли бы вы рассказать немного больше? У меня большие проекты с множеством JS, поступающих со всех сторон, и мои объявления Google не отображаются в IE8. Что мне нужно изменить? –

+0

Если вы используете что-то, что расширяет Array.prototype или Object.prototype, у вас возникнут проблемы ... Я использовал обрезку EcmaScript5 (аналогичная библиотека прототипов). Удалите любые такие прокладки и используйте что-то вроде lodash или подчеркивание. – Tracker1