/**
* 用于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);