2012-01-05 34 views
1

Google Ads(DFP)がIE8に表示されないという奇妙な問題が発生しています(IE 8のテストではありません)。Googleの広告が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です。 1つのIFrameが部分的にIE8にロードされていると(DOMツリーから)ほとんど見えますが、ただ落ちてしまいます。

答えて

2

Googleのコードではfor (var x in array)を使用していますが、一部のブラウザではArray.prototypeを拡張すると問題が発生します。

なぜ反復に.lengthプロパティを使用していないか、またはhasOwnPropertyをチェックするのが私の手を離れているのですが、それは手元にあるようです。

Underscore.jsが必要なプロジェクトにはBackbone.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を書く人は誰でも注意してください。明示的にhasOwnPropertyをチェックしない限り、for..inを使用しないでください。これは、配列とオブジェクトの両方に適用されます。

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シミングを使用していました(プロトタイプライブラリは同様です)。そのようなシムを取り外し、ロダッシュやアンダースコアのようなものを使用してください。 – Tracker1

関連する問題