JS加载360广告;

/**
 * 用于js获取hash值
 */
var I64BIT_TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-'.split('');

function getHash(input){
 var hash = 5381;
 var i = input.length - 1;

 if(typeof input == 'string'){
  for (; i > -1; i--)
   hash += (hash << 5) + input.charCodeAt(i);
 }
 else{
  for (; i > -1; i--)
   hash += (hash << 5) + input[i];
 }
 var value = hash & 0x7FFFFFFF;

 var retValue = '';
 do{
  retValue += I64BIT_TABLE[value & 0x3F];
 }
 while(value >>= 6);

 return retValue;
}

/**
 * 获取随机数
 * @return
 */
function getuid() {
    var uid = '';
    var d = (new Date() - 0);
    var s = window.location.href;
    var hash = getHash(s);
    uid = "" + d + hash + Math.random() + Math.random() + Math.random() + Math.random();
    uid = uid.replace(/\./g, "").substring(0, 32);
    return uid;
}
/**
 * 发起跨域请求
 * @return
 */
function dynamicScript(url){
    if(url == undefined){
         return false;
    }
    var s = document.createElement("script");
    s.src = url;
    document.getElementsByTagName("head")[0].appendChild(s);
    return true;
}

//点击事件
function clickAd(curl,clktk){
    var clktkArray = clktk.split(',');
    //发起点击检测请求STA
    if(clktkArray!=undefined&&clktkArray!=''&&clktkArray.length>0){
        for(var j=0;j<clktkArray.length;j++){
            dynamicScript(clktkArray[j]);
        }
    }
    //发起点击检测请求END

    //点击跳转
    window.open(curl,'_baank');

}

//是否是可见区域内
function isCanBeLook(divId){

    //console.log("当前验证div="+divId);
    //console.log("当前验证div长度="+jQuery('#'+divId).length);
    if(jQuery('#'+divId).length>0){
        var look = true;
        var look1 = jQuery(window).scrollTop()>(jQuery('#'+divId).offset().top+jQuery('#'+divId).outerHeight());
        var look2 = jQuery(window).scrollTop()<(jQuery('#'+divId).offset().top-jQuery(window).height());
        if(look1||look2){
            look = false;
        }
        return look;
    }else{
        return false;
    }


}
//是否需要曝光
function toBaoguang(divId,adSize,imptk){
    if(baoGuangArray[adSize]){

    }else{
        if(isCanBeLook(divId)){
            //发起曝光检测请求STA
            if(imptk!=undefined&&imptk!=''&&imptk.length>0){
                for(var j=0;j<imptk.length;j++){
                    dynamicScript(imptk[j]);
                }
            }
            //发起曝光检测请求END
            baoGuangArray[adSize] = true;
            /**此处应该也是判断,但是应该不会用到 start*/
            //console.log("此处检测是否是需要加载下次的数据");
            var needLoadIndex;
            var alreadyRequest = reqtimes*13;
            if(alreadyRequest-1<tiqianstep){
                needLoadIndex = alreadyRequest-1;
            }else{
                needLoadIndex = alreadyRequest-1-tiqianstep;
            }
            if(adSize==needLoadIndex){
                //console.log("符合要求,准备下次加载");
                //循环调用,防止当时有正在执行的导致此方法未执行
                nextRequest = setInterval(xunhuanzhixing(),200);
            }
            /**此处应该也是判断,但是应该不会用到 end*/
        }else{
            $(window).scroll(function(event){
                if(!baoGuangArray[adSize]&&isCanBeLook(divId)){
                    //发起曝光检测请求STA
                    if(imptk!=undefined&&imptk!=''&&imptk.length>0){
                        for(var j=0;j<imptk.length;j++){
                            dynamicScript(imptk[j]);
                        }
                    }
                    //发起曝光检测请求END
                    baoGuangArray[adSize] = true;

                    /***此处检测是否是需要加载下次的数据。start***/
                    //console.log("此处检测是否是需要加载下次的数据");

                    /*var needLoadIndex;
                    if(ad360Sum-1<tiqianstep){
                        needLoadIndex = ad360Sum-1;
                    }else{
                        needLoadIndex = ad360Sum-1-tiqianstep;
                    }*/
                    var needLoadIndex;
                    var alreadyRequest = reqtimes*13;
                    if(alreadyRequest-1<tiqianstep){
                        needLoadIndex = alreadyRequest-1;
                    }else{
                        needLoadIndex = alreadyRequest-1-tiqianstep;
                    }

                    if(adSize==needLoadIndex){
                        //console.log("符合要求,准备下次加载");
                        //循环调用,防止当时有正在执行的导致此方法未执行
                        //initToutiaoList();
                        nextRequest = setInterval(xunhuanzhixing(),200);


                    }
                    /***此处检测是否是需要加载下次的数据。end***/
                }
            });
        }


    }

}
/**
 * 循环执行
 * @return
 */
function xunhuanzhixing(){
    if(zhixingArray[reqtimes-1]==undefined){
        zhixingArray[reqtimes-1] = false;
    }
    if(zhixingArray[reqtimes-1]){
        //执行过就取消
        nextRequest = clearInterval(nextRequest);
    }else{
        initToutiaoList();
    }
}

/**
 * 写入script
 * @return
 */
function initToutiaoList(){
    //此次还未执行
    if(zhixingArray[reqtimes-1]==undefined){
        zhixingArray[reqtimes-1] = false;
    }
    if(ifPreWorkIng){
        console.log("上一次执行还在执行,防止提前加载后续广告引起同时执行多个回调函数");
        return false;
    }
    if(zhixingArray[reqtimes-1]){
        console.log("已经执行过reqtimes="+reqtimes);
        return false;
    }
    //开始执行,执行标志置为true
    zhixingArray[reqtimes-1] = true;
    ifPreWorkIng = true;
    reqtimes = reqtimes+1;

    var impct = 13;//请求个数   
    var showid = 'qZPA1v'; //中华头条列表页改版信息流广告
    var wntjcon = document.getElementById(listDivId);
    var jsonp = 'showOnHtml';
    if(wntjcon!=undefined){
        var ad_url = 'http://show.g.mediav.com/s?type=1&of=4&newf=1&jsonp='+jsonp+'&showid='+showid+'&impct='+impct+'&reqtimes='+reqtimes+'&uid='+getuid();
        //document.write("<script src=\""+ad_url+"\"></script>");


        var newScript = document.createElement('script');
        newScript.type = 'text/javascript';
        newScript.src = ad_url;
        //newScript.innerHTML = oldScript.innerHTML;
        wntjcon.appendChild(newScript);
    }
}

/**
 * 展示到页面
 * @param data
 * @return
 * 注意:返回的可能是多组ads.但是只要第一个。
 */
function showOnHtml(json) {

    var ads = json.ads;
    if(ads==undefined||ads.length==0){
        //执行完后执行标志置为false
        ifPreWorkIng = false;
        return false;
    }

    ad360RequestSum = ad360RequestSum + ads.length;

    var type = '';          //类型1=单图,2三图
    var slot = '';          //位置id
    var img = '';           //图片地址
    var desc =  '';         //描述
    var curl =  '';         //创意点击落地页,用户点击创意时最终落地的页面,可能会带302跳转
    var title =  '';        //标题
    var src =  '';          //广告来源
    var imptk =  '';        //一组曝光追踪,曝光时发送
    var clktk =  '';        //一组点击追踪,点击时发送
    var assets =[];         //三图时候的图片组

    var childs = wntjcon.children;
    if(wntjcon != undefined && childs!=undefined) {
        //对新闻循环
        for (; newsIndex < childs.length; newsIndex=newsIndex + step+1) {
            if(adSum % ad360AndBaiduCount >= ad360Count) {

                //百度广告
                var html = '<script type="text/javascript" src="'+ baiduAdArray[ad360Sum % baiduAdArray.length] +'"><\/script>'
                var scriptSrc = baiduAdArray[ad360Sum % baiduAdArray.length];

                var firstDom = childs[newsIndex-1];
                var $adDiv = $("<div class='wntjItem tt_xxl_L'></div>");
                $(firstDom).after($adDiv);            

                var adBaiduDiv = $adDiv[0];
                adBaiduDiv.innerHTML = html;
                var oldScript = adBaiduDiv.getElementsByTagName('script')[0];
                adBaiduDiv.removeChild(oldScript);
                var newScript = document.createElement('script');
                newScript.type = 'text/javascript';
                newScript.src = scriptSrc;
                newScript.innerHTML = oldScript.innerHTML;
                adBaiduDiv.appendChild(newScript);


            } else {
                if(ad360Sum >= ad360RequestSum) {
                    //reqtimes = reqtimes + 1;
                    //initToutiaoList(reqtimes);
                    //执行完后执行标志置为false
                    ifPreWorkIng = false;   
                    return false;
                }else {
                        //360广告
                        var adIndex = ad360Sum % ads.length;
                        var oneAd = ads[adIndex];
                        type = oneAd.type;          //样式类型
                        slot = oneAd.slot;          //位置id
                        img = oneAd.img;            //图片地址
                        desc =  oneAd.desc;         //描述
                        curl =  oneAd.curl;         //创意点击落地页,用户点击创意时最终落地的页面,可能会带302跳转
                        title =  oneAd.title;       //标题
                        src =  oneAd.src;           //广告来源
                        imptk =  oneAd.imptk;       //一组曝光追踪,曝光时发送
                        clktk =  oneAd.clktk;       //一组点击追踪,点击时发送
                        assets = oneAd.assets;      //三图时候的图片组

                        ad360Sum++;

                        //目标DIV
                        var targetDivId = 'picNewList_ad'+ad360Sum;
                        //拼广告,1=单图;2=三图;

                        var html = '';
                        if(type=='1'){
                             html = '<div class="wntjItem item_qifeiView clearfix" id="'+targetDivId+'">'+
                                      '<div class="item_img">'+
                                          '<a href="javascript:void(0);" onclick="clickAd(\''+curl+'\',\''+clktk+'\')">'+
                                            '<img src="'+img+'" width="162" height="108">'+
                                          '</a>'+
                                      '</div>'+
                                      '<div class="item_con">'+
                                        '<h3 class="tit">'+
                                            '<a href="javascript:void(0);" onclick="clickAd(\''+curl+'\',\''+clktk+'\')">'+
                                                title+
                                            '</a>'+
                                        '</h3>'+
                                        '<div class="sum">'+
                                            '<a href="javascript:void(0);" onclick="clickAd(\''+curl+'\',\''+clktk+'\')">'+
                                                desc+
                                            '</a>'+
                                        '</div>'+
                                        '<div class="item_foot">'+
                                          '<span class="source">来源:'+src+'</span>'+
                                        '</div>'+
                                      '</div>'+
                                     '<div class="item_num"><i class="s-nub"></i></div>'+
                                    '</div>';
                        }else if(type=='2'){
                            var itemHtml = '';
                            for (var q = 0; q < assets.length&&q<3; q++) {
                                var oneAsset = assets[q];
                                var itemImg = oneAsset.img;
                                var itemcurl = oneAsset.curl;

                                itemHtml+='<a href="javascript:void(0);" target="_blank" onclick="clickAd(\''+itemcurl+'\',\''+clktk+'\')">'+
                                            '<img src="'+itemImg+'" alt="">'+
                                          '</a>';
                            }

                            html = '<div class="wntjItem item_qifeiPicView clearfix" id="'+targetDivId+'">'+
                                      '<h3 class="tit">'+
                                        '<a href="javascript:void(0);" target="_blank" onclick="clickAd(\''+curl+'\',\''+clktk+'\')">'+
                                            title+
                                        '</a>'+
                                      '</h3>'+
                                      '<div class="item_img">'+
                                          itemHtml+
                                      '</div>'+
                                      '<div class="item_foot"><span class="source">来源:'+src+'</span></div>'+
                                      '<div class="item_num"><i class="s-nub"></i></div>'+
                                    '</div>';
                        }else if(type=='3'){

                          html =    '<div class="wntjItem item_bigPicView clearfix" id="'+targetDivId+'">'+
                                      '<h3 class="tit">'+
                                          '<a href="javascript:void(0);"  onclick="clickAd(\''+curl+'\',\''+clktk+'\')">'+
                                            title+
                                          '</a>'+
                                      '</h3>'+
                                      '<div class="item_img">'+
                                            '<a href="javascript:void(0);"  onclick="clickAd(\''+curl+'\',\''+clktk+'\')">'+
                                                '<img src='+ img +'>'+
                                             '</a>'+
                                       '</div>'+
                                            "<div class='item_con'>"+
                                              "<div class='item_foot'>"+
                                                '<span class="source">来源:'+
                                               src +
                                              '</span>'+
                                            '</div>'+
                                        '</div>'+
                                        '<div class="item_num"><i class="s-nub"></i></div>'+
                                   '</div>'
                        }

                        var firstDom = childs[newsIndex-1];
                        var oldHtml = firstDom.outerHTML;
                        firstDom.outerHTML = oldHtml+html;

                        baoGuangArray[ad360Sum-1] = false;
                        //console.log("添加曝光检测,targetDivId="+targetDivId);
                        //console.log("添加曝光检测,adSize="+(ad360Sum-1));
                        //console.log("添加曝光检测,imptk="+imptk);
                        toBaoguang(targetDivId,(ad360Sum-1),imptk);
                    }
            }
            adSum++;
        }
    }
    //执行完后执行标志置为false
    ifPreWorkIng = false;
}


//广告曝光,此数据需要手动修改,无法配置成参数(根据广告位个数)
var baoGuangArray = new Array();

//外层list的ID
var listDivId='index_wntjcon';


var wntjcon = document.getElementById(listDivId);           //新闻的列表
var start = 3;  //广告起始位置
var step = 3;  //间隔条数

var ad360Count = 2;    //一个周期的360的广告数量
var adBaiduCount = 2;   //一个周期的Baidu广告数量
var ad360AndBaiduCount = ad360Count + adBaiduCount;//总的广告周期

var ad360Sum = 0;     //360广告的数量
var adBaiduSum = 0;   //Baidu广告的数量
var adSum = 0;        //广告的总数


var ad360RequestSum =0;     //当前请求的360广告数量
var newsIndex = start;      //当前新闻遍历到的节点索引。
var reqtimes = 0;           //360请求次数
var tiqianstep = 3;         //360广告二次请求的提前量。
var ifPreWorkIng = false;   //上一次是否在加载
var zhixingArray = new Array();//是否执行过记录
var nextRequest;            //轮询定时器。

//百度广告数组(循环使用)
var baiduAdArray = new Array();
baiduAdArray[0] = 'http://1.aili.com/gbthcxqcyeix.js';
baiduAdArray[1] = 'http://1.aili.com/jewkfatfghlfgmk.js';
baiduAdArray[2] = 'http://1.aili.com/gbthcxqdxeix.js';
baiduAdArray[3] = 'http://1.aili.com/fasgbwpipdh.js';
baiduAdArray[4] = 'http://1.aili.com/mhznidwppkon.js';
baiduAdArray[5] = 'http://1.aili.com/kfxlgcgbeimhnlou.js';

//广告初始化
initToutiaoList();

其中拆分出来的几个代码段

获取随机数

/**
 * 用于js获取hash值
 */
var I64BIT_TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-'.split('');

function getHash(input){
 var hash = 5381;
 var i = input.length - 1;

 if(typeof input == 'string'){
  for (; i > -1; i--)
   hash += (hash << 5) + input.charCodeAt(i);
 }
 else{
  for (; i > -1; i--)
   hash += (hash << 5) + input[i];
 }
 var value = hash & 0x7FFFFFFF;

 var retValue = '';
 do{
  retValue += I64BIT_TABLE[value & 0x3F];
 }
 while(value >>= 6);

 return retValue;
}

/**
 * 获取随机数
 * @return
 */
function getuid() {
    var uid = '';
    var d = (new Date() - 0);
    var s = window.location.href;
    var hash = getHash(s);
    uid = "" + d + hash + Math.random() + Math.random() + Math.random() + Math.random();
    uid = uid.replace(/\./g, "").substring(0, 32);
    return uid;
}

发起跨域请求

/**
 * 发起跨域请求
 * @return
 */
function dynamicScript(url){
    if(url == undefined){
         return false;
    }
    var s = document.createElement("script");
    s.src = url;
    document.getElementsByTagName("head")[0].appendChild(s);
    return true;
}

是否在可视区域

//是否是可见区域内
function isCanBeLook(divId){

    //console.log("当前验证div="+divId);
    //console.log("当前验证div长度="+jQuery('#'+divId).length);
    if(jQuery('#'+divId).length>0){
        if(jQuery('#'+divId).is(":visible")){
            var look = true;
            var look1 = jQuery(window).scrollTop()>(jQuery('#'+divId).offset().top+jQuery('#'+divId).outerHeight());
            var look2 = jQuery(window).scrollTop()<(jQuery('#'+divId).offset().top-jQuery(window).height());
            if(look1||look2){
                look = false;
            }
            return look;
        }else{
            return false;
        }

    }else{
        return false;
    }


}

滑动监听

//是否需要曝光
function toBaoguang(divId,adSize,imptk){
    if(baoGuangArray[adSize]){

    }else{
        if(isCanBeLook(divId)){
            //发起曝光检测请求STA
            if(imptk!=undefined&&imptk!=''&&imptk.length>0){
                for(var j=0;j<imptk.length;j++){
                    dynamicScript(imptk[j]);
                }
            }
            //发起曝光检测请求END
            baoGuangArray[adSize] = true;
            /**此处应该也是判断,但是应该不会用到 start*/
            //console.log("此处检测是否是需要加载下次的数据");
            var needLoadIndex;
            var alreadyRequest = reqtimes*13;
            if(alreadyRequest-1<tiqianstep){
                needLoadIndex = alreadyRequest-1;
            }else{
                needLoadIndex = alreadyRequest-1-tiqianstep;
            }
            if(adSize==needLoadIndex){
                //console.log("符合要求,准备下次加载");
                //循环调用,防止当时有正在执行的导致此方法未执行
                nextRequest = setInterval(xunhuanzhixing(),200);
            }
            /**此处应该也是判断,但是应该不会用到 end*/
        }else{
            $(window).scroll(function(event){
                if(!baoGuangArray[adSize]&&isCanBeLook(divId)){
                    //发起曝光检测请求STA
                    if(imptk!=undefined&&imptk!=''&&imptk.length>0){
                        for(var j=0;j<imptk.length;j++){
                            dynamicScript(imptk[j]);
                        }
                    }
                    //发起曝光检测请求END
                    baoGuangArray[adSize] = true;

                    /***此处检测是否是需要加载下次的数据。start***/
                    //console.log("此处检测是否是需要加载下次的数据");

                    /*var needLoadIndex;
                    if(ad360Sum-1<tiqianstep){
                        needLoadIndex = ad360Sum-1;
                    }else{
                        needLoadIndex = ad360Sum-1-tiqianstep;
                    }*/
                    var needLoadIndex;
                    var alreadyRequest = reqtimes*13;
                    if(alreadyRequest-1<tiqianstep){
                        needLoadIndex = alreadyRequest-1;
                    }else{
                        needLoadIndex = alreadyRequest-1-tiqianstep;
                    }

                    if(adSize==needLoadIndex){
                        //console.log("符合要求,准备下次加载");
                        //循环调用,防止当时有正在执行的导致此方法未执行
                        //initToutiaoList();
                        nextRequest = setInterval(xunhuanzhixing(),200);


                    }
                    /***此处检测是否是需要加载下次的数据。end***/
                }
            });
        }


    }

}

循环和取消循环

//初始化
var nextRequest = setInterval(xunhuanzhixing(),200);
//取消
nextRequest = clearInterval(nextRequest)

写入 < script >

var ad_url = '想要的地址';
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = ad_url;
wntjcon.appendChild(newScript);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值