How can we keep OpenX from blocking page load?

前端 未结 5 1126
伪装坚强ぢ
伪装坚强ぢ 2021-02-06 03:13

We\'re using OpenX to serve ads on a number of sites. If the OpenX server has problems, however, it blocks page loads on these sites. I\'d rather have the sites fail gracefully,

5条回答
  •  -上瘾入骨i
    2021-02-06 03:25

    We lazy-load OpenX's code. Instead of putting the single-page call at the top of the page, we put it at the bottom. After the page has loaded, the call will get the banner data and a custom code will add the correct banners in the correct zones.

    The code below requires a proper DOM. If you have jQuery, DOMAssistant, FlowJS, etc, the DOM should be fixed for you. This code will work with normal banners with images, flash, or HTML content. It may not work in some cases like when using banners from external providers (adform, etc). For that you may need to hack the code a bit.

    How to use it?

    1. add your SinglePageCall code towards the end of your HTML code
    2. add this code under the SPC code.
    3. after half a second or so, your OpenX code should be ready, and the code below will put the banners within the specified DIVs.
    4. Oh, yeah, you need to add to your HTML code some DIVs as place holders for your banners. By default I have these banners set with CSS class "hidden" which totally hides the DIVs (with visibility, display, and height). Then, after the banner in a given DIV is successfully loaded, we remove the hidden class and the DIV (and the banner within) become visible.

    Use at your own risk! :) Hope it helps

    (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. = 
    // 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 = "
    
                                     
                  
提交回复
热议问题