2010-09-22 15 views
9

Bazı sitelerde reklam sunmak için OpenX kullanıyoruz. OpenX sunucusunda sorun varsa, bu sitelerdeki sayfa yüklerini engeller. Sitelerin hassas bir şekilde başarısız olmasını, yani sayfaları reklamsız olarak yüklemeyi ve kullanılabilir olduklarında doldurmayı tercih ederim.OpenX'i sayfa yükünü engellemekten nasıl koruyabiliriz?

OpenX'in single page call sürümünü kullanıyoruz ve CSS'de div'leri açık bir boyutta veriyoruz, böylece içerikler olmadan yerleştirilebiliyorlar, ancak yine de kod blokları sayfa yükünü yüklüyorlar. OpenX ile sayfaları hızlandırmak için başka en iyi yöntemler var mı?

+0

http://stackoverflow.com/questions/3106782/openx-aysnc-tags –

cevap

1

OpenX uyumsuz etiketlerinin yükleyebilmek için bazı belgelere sahiptir: http://docs.openx.com/ad_server/adtagguide_synchjs_implementing_async.html

bunu test ettik ve mevcut Krom/Firefox'ta iyi çalışır.

Reklam kodlarının manuel olarak ayarlanması gerekir. reklam etiketleri bitmelidir nasıl Onların örnek:

<html> 
<head></head> 

<body> 

Some content here. 

Ad goes here. 

<!-- Preserve space while the rest of the page loads. --> 

<div id="placeholderId" style="width:728px;height:90px"> 

<!-- Fallback mechanism to use if unable to load the script tag. --> 

<noscript> 
<iframe id="4cb4e94bd5bb6" name="4cb4e94bd5bb6" 
src="http://d.example.com/w/1.0/afr?auid=8&target= 
_blank&cb=INSERT_RANDOM_NUMBER_HERE" 
frameborder="0" scrolling="no" width="728" 
height="90"> 
<a href="http://d.example.com/w/1.0/rc?cs= 
4cb4e94bd5bb6&cb=INSERT_RANDOM_NUMBER_HERE" 
target="_blank"> 
<img src="http://d.example.com/w/1.0/ai?auid=8&cs= 
4cb4e94bd5bb6&cb=INSERT_RANDOM_NUMBER_HERE" 
border="0" alt=""></a></iframe> 
</noscript> 
</div> 

<!--Async ad request with multiple parameters.--> 

<script type="text/javascript"> 
    var OX_ads = OX_ads || []; 
    OX_ads.push({ 
     "slot_id":"placeholderId", 
     "auid":"8", 
     "tid":"4", 
     "tg":"_blank", 
     "r":"http://redirect.clicks.to.here/landing.html", 
     "rd":"120", 
     "rm":"2", 
     "imp_beacon":"HTML for client-side impression beacon", 
     "fallback":"HTML for client-side fallback" 
    }); 
</script> 

<!-- Fetch the Tag Library --> 

<script type="text/javascript" src="http://d.example.com/w/1.0/jstag"></script> 

Some other content here. 

</body> 
</html> 
+1

Hey, bu iyi haber! OpenX ile 2 yıldan beri çalışmıyorum ama bunun gibi performansları yakaladıklarını görmek güzel. – pjmorse

5

Yaşadığınız sorunu önlemek için reklamlarımızı iframe'lere yüklüyoruz. Yalnızca div ve iframe'i aynı şekilde boyutlandırırız, iframe yalnızca reklam snippet'ini içeren bir sayfaya işaret eder (bu bölgeye parametreler olarak bölge ve diğer gerekli seçenekleri iletebilirsiniz).

şerefe

Lee

+0

bir iç çerçeveye reklamın yüklenmesinde böyle kaybı gibi herhangi bir dezavantajları var mı bakın bağlam? (yani, sayfanın geri kalanını "göremez"). Veya iframe URL'sinde gerekli herhangi bir bağlam parametresini mi iletiyorsunuz? – cherouvim

+0

Sayfanıza anahtar kelimeler ve içerik ekliyoruz (dış sayfadan görünmüyor) ve ayrıca snippet'i yönlendiriyorlar, böylece yönlendiren URL'yi tararlarsa içeriğiyle ilgileniyorlar. – leebutts

5

Biz tembel-yük OpenX kanunu. Tek sayfalık aramayı sayfanın en üstüne koymak yerine, en alt kısma yerleştirdik. Sayfa yüklendikten sonra, çağrı banner verisini alacak ve doğru kodlar doğru bölgelere doğru banner'ları ekleyecektir.

Aşağıdaki kod uygun bir DOM gerektirir. Eğer jQuery, DOMAssistant, FlowJS vb. Varsa DOM sizin için düzeltilmelidir. Bu kod görüntüler, flash veya HTML içeriği ile normal banner'larla çalışacaktır. Bazı durumlarda, dış sağlayıcılardan (adform, vb.) Pankart kullanırken olduğu gibi çalışmayabilir. Bunun için biraz kod kesmek gerekebilir.

Nasıl kullanılır?

  1. SPC kodu altında bu kodu eklemek HTML kodu
  2. sonuna doğru sizin SinglePageCall kodu ekleyin.
  3. yarım saniye sonra, OpenX kodunuz hazır olmalı ve aşağıdaki kodlar belirtilen DIV'lerin içine yerleştirecektir.
  4. Oh, evet, HTML kodunuza bazı DIV'leri banner'larınız için yer tutucuları olarak eklemeniz gerekir. Varsayılan olarak, bu afişleri, DIV'leri tamamen gizleyen (görünürlük, ekran ve yükseklik) CSS sınıfı "gizli" olarak ayarlıyorum. Ardından, belirli bir DIV'deki banner başarıyla yüklendikten sonra, gizli sınıfı kaldırırız ve DIV (ve içindeki banner) görünür hale gelir.

Kendi sorumluluğunuzda kullanın! o @Rafa mükemmel cevap takiben

(function(){ 
if (!document || !document.getElementById || !document.addEventListener || !document.removeClass) { 
return; // No proper DOM; give up. 
} 
var openx_timeout = 1, // limit the time we wait for openx 
oZones = new Object(), // list of [div_id] => zoneID 
displayBannerAds; // function. 


// oZones.<divID> = <zoneID> 
// eg: oZones.banner_below_job2 = 100; 
// (generated on the server side with PHP) 
oZones.banner_top = 23; 
oZones.banner_bottom = 34; 



displayBannerAds = function(){ 
if(typeof(OA_output)!='undefined' && OA_output.constructor == Array){ 
    // OpenX SinglePageCall ready! 

    if (OA_output.length>0) { 

    for (var zone_div_id in oZones){ 
     zoneid = oZones[zone_div_id]; 

     if(typeof(OA_output[zoneid])!='undefined' && OA_output[zoneid]!='') { 

     var flashCode, 
      oDIV = document.getElementById(zone_div_id); 

     if (oDIV) { 

      // if it's a flash banner.. 
      if(OA_output[zoneid].indexOf("ox_swf.write")!=-1) 
      { 

      // extract javascript code 
      var pre_code_wrap = "<script type='text/javascript'><!--// <![CDATA[", 
       post_code_wrap = "// ]]> -->"; 

      flashCode = OA_output[zoneid].substr(OA_output[zoneid].indexOf(pre_code_wrap)+pre_code_wrap.length); 
      flashCode = flashCode.substr(0, flashCode.indexOf(post_code_wrap)); 


      // replace destination for the SWFObject 
      flashCode = flashCode.replace(/ox\_swf\.write\(\'(.*)'\)/, "ox_swf.write('"+ oDIV.id +"')"); 


      // insert SWFObject 
      if(flashCode.indexOf("ox_swf.write")!=-1){ 
       eval(flashCode); 
       oDIV.removeClass('hidden'); 
      }// else: the code was not as expected; don't show it 


      }else{ 
      // normal image banner; just set the contents of the DIV 
      oDIV.innerHTML = OA_output[zoneid]; 
      oDIV.removeClass('hidden'); 
      } 
     } 
     } 
    } // end of loop 
    }//else: no banners on this page 
}else{ 
    // not ready, let's wait a bit 
    if (openx_timeout>80) { 
    return; // we waited too long; abort 
    }; 
    setTimeout(displayBannerAds, 10*openx_timeout); 
    openx_timeout+=4; 
} 
}; 
displayBannerAds(); 
})(); 
+0

Bu özel kodun bir örneğini verebilir misiniz? Ben document.write işlevini değiştirmekle uğraştım ama aynı sayfada birkaç afişimiz olduğu için içeriği uygun kapsayıcılara yüklemekle ilgili bazı problemlerim vardı. –

+0

Rafa, bunun gibi özel kod: http://jqueryad.web2ajax.fr/? Bunu yakın zamanda bulduk ancak henüz bir test olarak uygulamadık. – pjmorse

+0

pjmorse> Daha önce hiç yorumunuza cevap vermediğimi ve cevabınızı güncellediğimi fark ettim. Bir çeşit bildirim aldığın merak ediyorum. Değilse, burada bir "ping"/"poke" yorum, sadece durumda ... bir yıl sonra ;-) – Rafa

1

i sayfa yüklendikten sonra OpenX afişleri çağırmak için bu kodu kullanıyorum yardımcı Umut :). Ben de jquery kullanıyorum ve flash banner'ların kullandığı "document.write" için yeni bir değiştirme çağrısı eklemek ve "$ ('#" + oDIV.id + "') ile değiştirmek yerine. "OA_show()" yerine geçmek için özel bir "my_openx()" çağrısı kullanıyorum. Benim afiş alanı bu gibi zone_id bağlantı tarafından çağrılan ve bir div içine sarılır: Bu :)

<script type="text/javascript">    
$is_mobile = false; 
$document_ready = 0; 
$(document).ready(function() { 
    $document_ready = 1; 
    if($('#MobileCheck').css('display') == 'inline') { 
     $is_mobile = true; 
     //alert('is_mobile: '+$is_mobile); 
    } 
}); 

function wm_openx($id) { 
    if($is_mobile) return false; 
    if(!$document_ready) { 
     setTimeout(function(){ wm_openx($id); },1000); 
     return false; 
    } 

    if(typeof(OA_output[$id])!='undefined' && OA_output[$id]!='') { 

     var flashCode, 
      oDIV = document.getElementById('openx-'+$id); 

     if (oDIV) { 

      // if it's a flash banner.. 
      if(OA_output[$id].indexOf("ox_swf.write")!=-1) { 

       // extract javascript code 
       var pre_code_wrap = "<script type='text/javascript'><!--// <![CDATA[", 
        post_code_wrap = "// ]]> -->"; 

       flashCode = OA_output[$id].substr(OA_output[$id].indexOf(pre_code_wrap)+pre_code_wrap.length); 
       flashCode = flashCode.substr(0, flashCode.indexOf(post_code_wrap)); 

       // replace destination for the SWFObject 
       flashCode = flashCode.replace(/ox\_swf\.write\(\'(.*)'\)/, "ox_swf.write('"+ oDIV.id +"')"); 
       flashCode = flashCode.replace(/document.write/, "$('#"+ oDIV.id +"').append"); 


       // insert SWFObject 
       if(flashCode.indexOf("ox_swf.write")!=-1) { 
        //alert(flashCode); 
        eval(flashCode); 
        //oDIV.removeClass('hidden'); 
       }// else: the code was not as expected; don't show it 


      }else{ 
       // normal image banner; just set the contents of the DIV 
       oDIV.innerHTML = OA_output[$id]; 
       //oDIV.removeClass('hidden'); 
      } 
     } 
    } 
    //OA_show($id); 
} 
</script> 
1

çalışıyor

<div id="openx-4"><script>wm_openx(4);</script></div> 

Bunun arıyordu benim OpenX sunucusundan reklam yüklemek için yalnızca reklam görünür olmalıdır. Bir div içinde yüklenen openX iFrame sürümünü kullanıyorum.Buradaki cevap beni bu problemi çözme yoluna koydu, ancak yayınlanan çözüm biraz fazla basit. Her şeyden önce, sayfa en üstte yüklenmediğinde (kullanıcının 'arkaya' tıklayarak sayfayı girmesi durumunda), div'lerin hiçbiri yüklenmez.

$(document).ready(function(){ 
    $(window).scroll(lazyload); 
    lazyload(); 
}); 

da, görünür bir div tanımlar bilmek gerekir: Yani böyle bir şey gerekir. Bu tamamen görülebilir veya kısmen görülebilir bir div olabilir. Nesnenin alt kısmı pencerenin üst kısmına eşit veya daha büyükse ve nesnenin üst kısmı pencerenin altına daha küçük veya eşitse görünür olmalıdır (veya bu durumda: yüklü). İşleviniz lazyload aşağıdaki gibi görünebilir: tüm büyük tarayıcılarda ve hatta benim iPhone'da test

function lazyload(){ 
    var wt = $(window).scrollTop(); //* top of the window 
    var wb = wt + $(window).height(); //* bottom of the window 

    $(".ads").each(function(){ 
     var ot = $(this).offset().top; //* top of object (i.e. advertising div) 
     var ob = ot + $(this).height(); //* bottom of object 

     if(!$(this).attr("loaded") && wt<=ob && wb >= ot){ 
     $(this).html("here goes the iframe definition"); 
     $(this).attr("loaded",true); 
     } 
    }); 
} 

, bir cazibe gibi çalışır !!