zoukankan      html  css  js  c++  java
  • 网络广告js备忘【1】

    对js代码不熟悉,而且又很讨厌多浏览器兼容的问题,就把代码加上写代码的理由贴上,一是备忘,免的被浏览器兼容再坑。二积累下js编写思路。

    历经了10版演变成现在的模样。

    外部代码

    var bitadv = "autosense";//附加到windows对象时变量名
    var tcount = 0;//测试部分事件的计数器
    function unitTest(showcontent) {
        document.getElementById("test1").innerHTML = document.getElementById("test1").innerHTML + showcontent;//在一个test1的div中将需要展示的测试信息展示
    };
    (function (winobj, winvarobj) {
        //---------------------------------对象缩编定义区-------------------------------------------减小变量名子,减轻js文件的大小
        var win = window;
        var isIE= (!!window.ActiveXObject || "ActiveXObject" in window)?true:false;//判断是否是ie浏览器,ie11不能使用头部信息的MSIE判断了
        var dom = win.document;
        var addEvent = win.addEventListener ? win.addEventListener : win.attachEvent;//简化绑定事件的代码
        var _$ = function (id) { return dom.getElementById(id); };//减少代码大小的缩写手段
        //配置挂载全局对象属性
        if (!winobj[winvarobj]) {
            winobj[winvarobj] = function () { };
        }
        var globalwin = winobj[winvarobj];
        var advhostpage = null;
        var advbase = null;
        var user = null;
        var nasConfig = null;
        var advPositionSet = null;
        var scriptId = "nas-js-";
        var generateId = "";
        var posId = "nas-pos-";
        var maxLeaveTimespan = 300000;//5分钟
        var adRequestUrlDmain = "http://autosense.bitauto.com/service"; //后端服务请求根地址
        //------------------------------窗体级别定义区---------------------------------------------
        if (!globalwin.inited) {
            globalwin.inited = true;
            //基础对象
            advbase = {
                guid: function () {
                    var guid = "";
                    for (var i = 1; i <= 32; i++) {
                        var n = Math.floor(Math.random() * 16.0).toString(16);
                        guid += n;
                        if ((i == 8) || (i == 12) || (i == 16) || (i == 20))
                            guid += "-";
                    }
                    return guid;
                },
                getComputedStyle: function (domobj) {//重写这个方法不使用公共API是因为ie的低版本浏览器不支持此方法,万恶的IE
                    var coordinate = {  0, height: 0 };
                    if (win.getComputedStyle) {
                        var styleobj = win.getComputedStyle(domobj, null);
                        coordinate.height = styleobj.height;
                        coordinate.width = styleobj.width;
                    } else {
                        coordinate.height = (domobj.currentStyle.height != "auto") ? domobj.currentStyle.height : domobj.offsetHeight;
                        coordinate.width = (domobj.currentStyle.width != "auto") ? domobj.currentStyle.width : domobj.offsetWidth;
                    }
                    return coordinate;
                },
                formatDate: function (dateobj) {
                    return dateobj.getFullYear() + "-" + (dateobj.getMonth() + 1) + "-" + dateobj.getDay() + " " + dateobj.getHours() + ":" 
    + dateobj.getMinutes() + ":" + dateobj.getSeconds() + " " + dateobj.getMilliseconds();
                },
                getClientInfo: function () {
                    var brower = ''; //浏览器类型
                    var screenWidth = window.screen.width; //分辨率 宽度
                    var screenHeight = window.screen.height; //分辨率 高度
                    var bitadvbrower = {};
                    var ua = navigator.userAgent.toLowerCase();
                    //alert(ua);
                    var s;
                    if (isIE) {//因为ie11的头部信息变化了,所以需要多一部分处理来识别浏览器
                        s = ua.match(/msie ([d.]+)/);
                        s ? (bitadvbrower.ie = s[1]) : (bitadvbrower.ie ="11");
                        //alert(bitadvbrower.ie)
                    }
                    else {
                         (s = ua.match(/firefox/([d.]+)/)) ? bitadvbrower.firefox = s[1] :
                        (s = ua.match(/chrome/([d.]+)/)) ? bitadvbrower.chrome = s[1] :
                        (s = ua.match(/opera.([d.]+)/)) ? bitadvbrower.opera = s[1] :
                        (s = ua.match(/version/([d.]+).*safari/)) ? bitadvbrower.safari = s[1] : 0;
                    }
                    //alert(bitadvbrower)
                    if (bitadvbrower.ie) brower= 'IE: ' + bitadvbrower.ie;
                    if (bitadvbrower.firefox) brower = 'Firefox: ' + bitadvbrower.firefox;
                    if (bitadvbrower.chrome) brower = 'Chrome: ' + bitadvbrower.chrome;
                    if (bitadvbrower.opera) brower = 'Opera: ' + bitadvbrower.opera;
                    if (bitadvbrower.safari) brower = 'Safari: ' + bitadvbrower.safari;
                    return {brower: brower
                        , screenWidth: screenWidth
                        , screenHeight: screenHeight
                    };
                },
                deleteVar: function (globalvarname) {
                    if (globalwin.advhostpage.candelete) {
                        try {//ie低版本浏览器的delete方法存在bug,造成行为和其他浏览器不一致,所以加一个try
                            delete win[globalvarname];
                        }
                        catch (ex) {
                            globalwin.advhostpage.candelete = false;
                            win[globalvarname] = null;
                        };
                    } else {
                        win[globalvarname] = null;
                    };
                }
            };
            globalwin.advbase = advbase;
            generateId = advbase.guid();
            posId = posId + generateId;
            scriptId = scriptId + generateId;
            //页面对象初始化
            advhostpage = {
                pageid: "",
                candelete:true,
                pageHeartbeatStop:false,
                pageRequestTime: new Date,
                referer: win.location.href,//逻辑要求 dom.referrer,
                href: win.location.href,
                isscolling: false,
                pageLeaveTime: null,
                pageLeaveTimespan:0,
                //鼠标横坐标
                mx: 0,
                //鼠标纵坐标
                my: 0,
                //广告展示信息发送
                sendAdMsg: function () {
    
                    //tcount++;
                    //unitTest("<br>3-tcount:" + tcount);//unitTest单元测试信息输出
                    //alert("发送区")
                    if (globalwin.user.isleav)//离开状态不检测展示状态
                        return;
                    if (advhostpage.isscolling)//滚动状态不检测展示状态
                        return;
                    //alert("广告监测区")
                    globalwin.advPositionSet.checkwrap();
                    globalwin.advPositionSet.decideShow();
                    var arr = globalwin.advPositionSet.getViewAds();
                    var viewurl = globalwin.nasConfig.urlitem[1].viewadssrc + "?lt=4&pageid=" + advhostpage.pageid + "&userid=" + globalwin.user.userid 
    + "&mx=" + advhostpage.mx + "&my=" + advhostpage.my;
                    for (var i = 0; i < arr.length; i++) {
                        if (!arr[i].issend) {                       
                            viewurl = viewurl + "&posid=" + arr[i].generateId + "&wl=" + arr[i].wraplegal+"&ct="+globalwin.advbase.formatDate(new Date);
                            advhostpage.loadJs(viewurl, function () { }, null, scriptId, null);
    
                            //unitTest("<br>4-url:" + viewurl);
                            //unitTest("<br>5-adx:" + arr[i].x + "-ady:" + arr[i].y);
    
                            arr[i].issend = true;
                        };
                    };
                   
                },
                heartbeat: function () {
    
                   //alert("心跳函数");
                     if (!advhostpage.isscolling) {
                    //    alert("发送小心");
                        advhostpage.sendAdMsg();
                    }
                 
                    setTimeout(advhostpage.heartbeat, 200);//产生心跳效果
                    if (advhostpage.pageLeaveTimespan > maxLeaveTimespan) {//超时即发出页面关闭通知
                        var closeurl = globalwin.nasConfig.urlitem[2].leavesrc + "?lt=5&pageid=" + advhostpage.pageid + "&userid=" + 
    globalwin.user.userid + "&ct=" + globalwin.advbase.formatDate(new Date);
                        advhostpage.loadJs(closeurl, function () { }, null, scriptId, null);
                    };
                },
                //打开页面
                pageStart: function () {
                    var brower=globalwin.advbase.getClientInfo();
                    var requesturl = globalwin.nasConfig.urlitem[4].pageshowsrc + "?lt=3&pageid=" + advhostpage.pageid + "&userid=" +
     globalwin.user.userid + "&bt=" + brower.brower + "&bw=" + brower.screenWidth + "&bh=" + brower.screenHeight + "&ct=" + 
    globalwin.advbase.formatDate(globalwin.advhostpage.pageRequestTime);
                    advhostpage.loadJs(requesturl, function () { }, null, scriptId, null);
                 },
                //页面关闭或者刷新
                pageClose: function () {
                    var closeurl = globalwin.nasConfig.urlitem[2].leavesrc + "?lt=5&pageid=" + advhostpage.pageid + "&userid=" +
     globalwin.user.userid + "&ct=" + globalwin.advbase.formatDate(new Date);
                    advhostpage.loadJs(closeurl, function () { }, null, scriptId, null);
                },
                //页面滚动
                pageScroll: function () {
                    //每隔一秒检测一次是否在滚动
                    if (!advhostpage.isscolling) {                  
                        setTimeout(function () {
                            advhostpage.isscolling = false;
                            globalwin.advPositionSet.advs.forEach(function (ad) {
                                ad.lasttime = new Date;
                            }, this);
                        }, 250);
                        advhostpage.isscolling = true;
                        globalwin.advPositionSet.advs.forEach(function (ad) {
                            ad.lasttime = new Date;
                        }, this);
                    };
                },
                pageBlur: function () {
                     globalwin.user.isleav = true;
                    advhostpage.pageLeaveTime = new Date;
                },
                pageFocus: function () {
                    globalwin.user.isleav = false;
                    if (advhostpage.pageLeaveTime)
                    advhostpage.pageLeaveTimespan = (new Date) - advhostpage.pageLeaveTime.getTime();
                },
                loadJs: function (url, callback, charset, id, wrapid) {//由于广告可能存在跨域问题,所以不使用ajax方式
                    if (_$(id)) {
                        var jsnode = _$(id);
                        try { jsnode.parentNode.removeChild(jsnode); }
                        catch (err) { }
                    }
                    var scriptText = dom.createElement("script");
                    scriptText.type = "text/javascript";
                    if (id) scriptText.id = id;
                    if (charset) scriptText.charset = charset;
                    if (scriptText.readyState) {
                        scriptText.onreadystatechange = function () {
                            if (scriptText.readyState == "loaded" || scriptText.readyState == "complete") {
                                scriptText.onreadystatechange = null;
                                if (callback) callback();
                            }
                        };
                    }
                    else {
                        scriptText.onload = function () {
                            if (callback) callback();
                        };
                    }
                    scriptText.src = url;
                    if (_$(wrapid)) {
                        _$(wrapid).appendChild(scriptText);
                    }
                    else
                        dom.body.appendChild(scriptText);
                },
                getMouseXY: function (ev) {
                   ev = ev || win.event;
                    if (ev.pageX || ev.pageY) {
                        globalwin.advhostpage.mx = ev.pageX, globalwin.advhostpage.my = ev.pageY;
                    }
                    else {
                        globalwin.advhostpage.mx = ev.clientX + document.body.scrollLeft - document.body.clientLeft,
                       globalwin.advhostpage.my = ev.clientY + document.body.scrollTop - document.body.clientTop
                    };
    
                   // unitTest("mx:" + globalwin.advhostpage.mx + "--my:" + globalwin.advhostpage.my);
                  
                }
            };
            advhostpage.pageid = globalwin.advbase.guid();
            globalwin.advhostpage = advhostpage;
            //用户对象
            user = {
                userid: "",
                //是否离开了窗体
                isleave: false,
                //获取指定名称的cookie的值  
                getCookie: function (cookieName) {
                    var arrStr = dom.cookie.split("; ");
                    if (arrStr) {
                        for (var i = 0; i < arrStr.length; i++) {
                            var temp = arrStr[i].split("=");
                            if (temp[0] == cookieName)
                                return unescape(temp[1]);
                        }
                    } else
                        return "no id";
                },
                setCookie: function (cookieName, val) {
                    var exdate = new Date();
                    dom.cookie = cookieName + "=" + encodeURIComponent(val) + ";max-age=315360000;domain="+win.document.domain+";path=/";
                },
                inituser: function () {
                    user.userid = user.getCookie("userid");
                    if (!user.userid) {
                        user.setCookie("userid", globalwin.advbase.guid());
                        user.userid = user.getCookie("userid");
                    }
                }
            }; 
            globalwin.user = user;
            //广告业务配置对象
            nasConfig = {
                //外部配置项userid、pageid、posid、referurl、unionid、siteid、adnum、type、titlelen、contentlen
                configitem: [{ name: "autosense_uid", val: "" }, { name: "autosense_adsiteid", val: "" }, { name: "autosense_width", val: "" }, 
    { name: "autosense_height", val: "" }, { name: "autosense_arraytype", val: "" }, { name: "autosense_border", val: "" }, 
    { name: "autosense_headbj", val: "" }, { name: "autosense_headtitle", val: "" }, { name: "autosense_contentbj", val: "" }, 
    { name: "autosense_contenttitle", val: "" }, { name: "autosense_contenttext", val: "" }, { name: "autosense_contentlink", val: "" }, 
    { name: "autosense_contentkeyword", val: "" }, { name: "autosense_contentlen", val: "" }, { name: "autosense_isshowhead", val: "" },
    { name: "autosense_cbid", val: "" }, { name: "autosense_cityid", val: "" }, { name: "autosense_adnum", val: "" }],
                kv:new Object,
                //需要使用url
                urlitem: [{ iframesrc: adRequestUrlDmain + "/getad.ashx" }, { viewadssrc: adRequestUrlDmain + "/log.ashx" }, 
    { leavesrc: adRequestUrlDmain + "/log.ashx" }, { firstloadadsrc: adRequestUrlDmain + "/log.ashx" }, { pageshowsrc: adRequestUrlDmain + "/log.ashx" }],
                //载入配置
                loadConfig: function () {
                    var configitems = nasConfig.configitem;
                    for (var i = 0; i < configitems.length; i++) {
                        if (win[configitems[i].name]) {
                            configitems[i].val = win[configitems[i].name];
                            nasConfig.kv[configitems[i].name] = configitems[i].val;
                           globalwin.advbase.deleteVar(configitems[i].name);                       
                        };
                    };
                }
            };
            globalwin.nasConfig = nasConfig;
            advPositionSet = {
                advs: new Array(),
                push: function (advobj) {
                    advPositionSet.advs.push(advobj);
                },
                checkwrap: function () {
                    for (var i = 0; i < advPositionSet.advs.length; i++) {
                        advPositionSet.advs[i].checkwrap(advPositionSet.advs[i].advdomid, advPositionSet.advs[i]);
                    }
                },
                decideShow: function () {
                    for (var i = 0; i < advPositionSet.advs.length; i++) {
                        if (advhostpage.isscolling)//保证滚动状态下不检测展示
                            return;
                        var target = advPositionSet.advs[i];                 
                        if (target.issend)
                            continue;
                        var zeroy = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
                        var zerox = document.documentElement.scrollLeft || window.pageXOffset || document.body.scrollLeft;
                        //完全展示
                         //由于ajax请求会高变部分元素高宽,需要重新即时计算坐标
                        var xy = target.getXY(dom.getElementById(target.advdomid));
                        target.x = xy.x;
                        target.y = xy.y;
                        //unitTest("<br>--->>show==zerox:" + zerox + "-zeroy:" + zeroy);
                        //unitTest("<br>--->>show==target.x:" + target.x + "-target.y:" + target.y);
                        //unitTest("<br>--->>show==targetMW:" + (target.x + target.advwidth) + "-targetMH:" + (target.y + target.advheight));
                        //unitTest("<br>--->>show==zeroMW:" + (zerox + window.screen.availWidth) + "-zeroMH:" + (zeroy + window.screen.availHeight));
    //alert("px:" + target.x + "-py:" + target.y + "---zerox:" + zerox + "-zeroy:" + zeroy + "--h:" + (zeroy + window.screen.availHeight));
    
                        if ((target.x >= zerox) && (target.y >= zeroy) && ((target.x + target.advwidth) <= (zerox + window.screen.availWidth))
     && ((target.y + target.advheight) <= (zeroy + window.screen.availHeight))) {
                            target.isview = true;
                            if (target.viewcount == 0)
                                target.lasttime = new Date;
                            target.viewcount++;
                            var currenttime = new Date;
                            target.adTimespan = currenttime.getTime() - target.lasttime.getTime();
    
                            //unitTest("<br>full");
    
                        }
                        else {
                            //计算4个1/3要点的位置,任何一个要点在屏幕内都视为展现
                            var isfind = false;
                            var xcell = target.advwidth / 3;
                            var ycell = target.advheight / 3;                       
                            var points = [{ x: target.x + xcell, y: target.y + ycell }, { x: target.x + 2 * xcell, y: target.y + ycell },
     { x: target.x + xcell, y: target.y + 2 * ycell }, { x: target.x + 2 * xcell, y: target.y + 2 * ycell }];
                            for (var i = 0; i < points.length; i++) {
                                if (isfind) continue;
                                //unitTest("<br>nofull:px:" + points[i].x + "-py:" + points[i].y);
    
                                if ((points[i].x >= zerox) && (points[i].y >= zeroy) && (points[i].x <= (zerox + window.screen.availWidth)) &&
     (points[i].y <= (zeroy + window.screen.availHeight))) {
                                    target.isview = true;
                                    isfind = true; //此处用break跳出循环会造成浏览器假死,一直未找到原因
                                    if (target.viewcount == 0)
                                        target.lasttime = new Date;
                                    target.viewcount++;
                                    var currenttime = new Date;
                                    target.adTimespan = currenttime.getTime() - target.lasttime.getTime();
    
     //alert("px:" + points[i].x + "-py:" + points[i].y + "---zerox:" + zerox + "-zeroy:" + zeroy + "--h:" + (zeroy + window.screen.availHeight));
                                    //unitTest("<br>nofull");
    
                                   
                                };
                            };
                        };
                    };
                },
                getViewAds: function () {
                    var viewads = new Array;
                    for (var i = 0; i < advPositionSet.advs.length; i++) {
                        if (advPositionSet.advs[i].isview && advPositionSet.advs[i].adTimespan > 1000)
                            viewads.push(advPositionSet.advs[i]);
                    };
                    return viewads;
                }
            };
            globalwin.advPositionSet = advPositionSet;
            //需要有外部配置对应参数对象
            var wineventconfig = {
                //鼠标移动、窗体滚动、鼠标点击
                eventitem: [{ name: "load", ev: globalwin.advhostpage.pageStart, isbind: true }, { name: "scroll", ev: globalwin.advhostpage.pageScroll, isbind: true },
     { name: "focus", ev: globalwin.advhostpage.pageFocus, isbind: true }, { name: "blur", ev: globalwin.advhostpage.pageBlur, isbind: true },
     { name: "beforeunload", ev: globalwin.advhostpage.pageClose, isbind: true }],
                init: function () {
                    var bingStand = win.addEventListener ? true : false;
                    for (var i = 0; i < wineventconfig.eventitem.length; i++) {
                        var target = wineventconfig.eventitem[i];
                        //对象结构:autosense_name=true/false
                        if (win["autosenseglobal_" + target.name]) {
                            target.isbind = win["autosenseglobal_" + target.name];
                        };
                        if (target.isbind) {
                            addEvent((bingStand ? "" : "on") + target.name, target.ev);//浏览器绑定方式不同,加on的是为了支持低版本ie浏览器
                        };
                    };
                    //由于ie与其他浏览器对鼠标mousemove事件支持对象不同,需作特殊处理
                    var isbindmousemove = true;
                    if (win["autosenseglobal_mousemove"]) {
                        isbindmousemove = win["autosenseglobal_mousemove"];
                    };
                    var mouseevent=globalwin.advhostpage.getMouseXY;
                    if (isbindmousemove) {
                        if (isIE) {
                            if (bingStand) {//ie高版本支持标准绑定
                                dom.addEventListener("mousemove", mouseevent);
                            } else {
                                dom.attachEvent("onmousemove", mouseevent);
                            };
                        } else {
                            win.addEventListener("mousemove", mouseevent);//非ie浏览器均采取标准绑定
                        };
                    };
                }
            };
            globalwin.wineventconfig = wineventconfig;
        };
        //--------------------------------临时对象定义区-------------------------------------------     
    
        //广告位
        var adInfo = {
            advPostionId: "",
            generateId:"",
            advdatas: null,
            //广告位绝对坐标
            x: 0,
            y: 0,
            //加载时间
            adRequestTime: "",
            //加载完成时间
            loadOverTime: "",
            //广告位的元素id
            advdomid: "",
            //广告内容数据的请求来源路径
            advSrc: "",
            //广告位的宽度
            adv 0,
            //广告位的高度
            advheight: 0,
            //广告宿主定义样式
            advstyle: null,
            //广告容器是否显示   
            wrapshow: 1,
            //广告外包元素的宽
            wrap 0,
            //广告外包元素的高
            wrapheight: 0,
            //容器是否合法,高宽不为0,不隐藏
            wraplegal: 1,
            //容器id
            wrapdomid: "",
            //广告宿主定义模板
            advtemplate: "",
            wraptype: "iframe",//广告的外包类型iframe和ins
            //上一次展示时间
            lasttime: null,
            viewcount: 0,
            //是否已经展示
            isview: false,
            //是否已经发送了
            issend:false,
            //单位毫秒
            adTimespan: 0,
            //构造后端函数请求地址  
            makeUrl: function () {
                //获取广告的参数:userid、pageid、posid、referurl、unionid、siteid、adnum、type、titlelen、contentlen  
                var paramas = [{ name: "unionid", val: "autosense_uid", defaultval: "", isencode: false }, 
    { name: "siteid", val: "autosense_adsiteid", defaultval: "", isencode: false }, { name: "adnum", val: "autosense_adnum", defaultval: "3", isencode: false }
    , { name: "type", val: "autosense_type", defaultval: "1", isencode: false }, { name: "titlelen", val: "autosense_titlelen", defaultval: "10", isencode: false },
     { name: "contentlen", val: "autosense_contentlen", defaultval: "", isencode: false }, { name: "border", val: "autosense_border", defaultval: "", isencode: true }, 
    { name: "width", val: "autosense_width", defaultval: "0", isencode: false }, { name: "height", val: "autosense_height", defaultval: "0", isencode: false },
     { name: "headbj", val: "autosense_headbj", defaultval: "", isencode: true }, { name: "arraytype", val: "autosense_arraytype", defaultval: "29", isencode: false }, 
    { name: "contentbj", val: "autosense_contentbj", defaultval: "", isencode: true }, { name: "contenttitle", val: "autosense_contenttitle", defaultval: "", isencode: true }, 
    { name: "contenttext", val: "autosense_contenttext", defaultval: "", isencode: true }, { name: "contentlink", val: "autosense_contentlink", defaultval: "", isencode: true }, 
    { name: "isshowhead", val: "autosense_isshowhead", defaultval: "0", isencode: false }, { name: "cbid", val: "autosense_cbid", defaultval: "", isencode: false },
     { name: "cityid", val: "autosense_cityid", defaultval: "", isencode: false }];
                var url = globalwin.nasConfig.urlitem[0].iframesrc + "?" + "posid=" + adInfo.generateId + "&pageid=" + globalwin.advhostpage.pageid + "&userid=" + globalwin.user.userid + "&referurl=" + globalwin.advhostpage.referer;
                for (var i = 0; i < paramas.length; i++) {
                    if (!globalwin.nasConfig.kv[paramas[i].val])
                        continue;
                    if (paramas[i].isencode)
                        url = url + "&" + paramas[i].name + "=" + encodeURIComponent(globalwin.nasConfig.kv[paramas[i].val] ? globalwin.nasConfig.kv[paramas[i].val] : paramas[i].defaultval);
                        else
                    url = url + "&" + paramas[i].name + "=" + (globalwin.nasConfig.kv[paramas[i].val] ? globalwin.nasConfig.kv[paramas[i].val] : paramas[i].defaultval);
                };
               
                url = url + (adInfo.jumpurl ? "&jumpurl=" + adInfo.jumpurl : "");
                return url;
            },
            //获取坐标,相对于文档的左上角
            getXY: function (domobj) {
                var x = 0, y = 0;
                if (domobj.getBoundingClientRect) {
                    var box = domobj.getBoundingClientRect();
                    var D = document.documentElement;
                    x = box.left + Math.max(D.scrollLeft, document.body.scrollLeft) - D.clientLeft;
                    y = box.top + Math.max(D.scrollTop, document.body.scrollTop) - D.clientTop
                }
                else {
                    for (; domobj != document.body; x += domobj.offsetLeft, y += domobj.offsetTop, domobj = domobj.offsetParent) { }
                }
                return { x: x, y: y }
            },
            //载入广告位
            iframeloadtest: function (iframeid, callback) {
                var iframeobj = _$(iframeid);
                iframeobj.onload = iframeobj.onreadystatechange = function () {
                    if (this.readyState && this.readyState != 'complete') return;
                    else {
                        callback();
                    }
                }
            },
            loadAdv: function (wrapid) {
                function loadoverevent() {
                    adInfo.loadOverTime = new Date();
                    var iframeobj = _$(adInfo.advdomid);
                    var xy = adInfo.getXY(iframeobj);
                    adInfo.x = xy.x;
                    adInfo.y = xy.y;            
                    //var firsturl = globalwin.nasConfig.urlitem[3].firstloadadsrc+"?";
    //firsturl = firsturl + "&pageid=" + globalwin.advhostpage.pageid + "&posid=" + adInfo.generateId + "&userid=" + globalwin.user.userid + "&x=" +
     adInfo.x + "&y=" + adInfo.y +"&ft=" + globalwin.advbase.formatDate(adInfo.adRequestTime) + "&fe=" + globalwin.advbase.formatDate(adInfo.loadOverTime);
                   // globalwin.advhostpage.loadJs(firsturl, function () { }, null, scriptId, null);
                    //alert("加载完成");
                    if (!globalwin.beated) {
                        globalwin.beated = true;
                        heartbeat();
    
                        //unitTest("<br>2-heartbeat");
    
                    };              
                };           
                adInfo.advSrc = adInfo.makeUrl();
                var wrapdomobj = _$(wrapid);
                if (wrapdomobj) {
                    var iframeobj = document.createElement("iframe");
                    iframeobj.id = adInfo.advdomid;
                    iframeobj.name = adInfo.advdomid;
                    iframeobj.src = adInfo.advSrc;
                    iframeobj.frameborder = 0;
                    iframeobj.marginheight = 0;
                    iframeobj.marginwidth = 0;
                    iframeobj.scrolling = "no";
                    iframeobj.width = adInfo.advwidth + "px";
                    iframeobj.height = adInfo.advheight + "px";
                    var wrapdomcssobj = globalwin.advbase.getComputedStyle(wrapdomobj);
                    adInfo.wrapwidth = wrapdomcssobj.width;
                    adInfo.wrapheight = wrapdomcssobj.height;
                    adInfo.wrapdomid = wrapid;
                    wrapdomobj.appendChild(iframeobj);
                    adInfo.adRequestTime = new Date();
                    adInfo.iframeloadtest(adInfo.advdomid, loadoverevent);
                }
                else {
                    var iframeHtml = '<iframe id="' + adInfo.advdomid + '" name="' + adInfo.advdomid + '" src="' + adInfo.advSrc + 
    '" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" width="' + adInfo.advwidth + 'px" height="' + adInfo.advheight + 'px"></iframe>';
                    adInfo.adRequestTime = new Date();
                    document.write(iframeHtml);
                    adInfo.iframeloadtest(adInfo.advdomid, loadoverevent);
                    var domobj = _$(adInfo.advdomid);
                    if (domobj.parentNode) {
                        var objstyle = globalwin.advbase.getComputedStyle(domobj.parentNode);
                        adInfo.wrapx = objstyle.width;
                        adInfo.wrapy = objstyle.height;
                        adInfo.wrapdomid = domobj.parentNode.id;
                    }
                }
            },
            //检测是否已经展示
            checkwrap: function (domid,advpobj) {
                //判断是否处于iframe中
                if ((dom.parentWindow == self) || (typeof (reValue) == "undefined")) {//ie与firefox兼容
                    //不处于iframe中
                    if (!_$(domid))
                        advpobj.wraplegal = 0;
                }
                else {
                    //处于iframe中
                    if (win.innerHeight && win.innerWidth) {
                        if ((win.innerHeigh < 10) || (win.innerWidth < 10))
                            advpobj.wraplegal = 0;
                    }
                    else {
                        if ((dom.documentElement.clientHeight < 10) || (dom.documentElement.clientHeight < 10))
                            advpobj.wraplegal = 0;
                    }
                };
            }
        };
        //---------------------------------------------执行区----------------------------
        function initcurrentad() {
            adInfo.advdomid = posId;
            adInfo.generateId = generateId;
            adInfo.advPostionId = adInfo.advdomid;
            adInfo.advheight = globalwin.nasConfig.kv["autosense_height"];
            adInfo.advwidth = globalwin.nasConfig.kv["autosense_width"];
            globalwin.advPositionSet.push(adInfo);//需要放在加载之前
        };
        function heartbeat() {
            setTimeout(globalwin.advhostpage.heartbeat, 1000);
        };
        //配置脚本执行过程
        var actionconfig = [{ name: "inituser", ev: globalwin.user.inituser, isaction: true },
     { name: "initadconfig", ev: globalwin.nasConfig.loadConfig, isaction: true }, { name: "initad", ev: initcurrentad, isaction: true },
     { name: "loadad", ev: adInfo.loadAdv, isaction: true }, { name: "bindEvent", ev: globalwin.wineventconfig.init, isaction: true }];
        //执行
        for (var runindex = 0; runindex < actionconfig.length; runindex++) {
            if (actionconfig[runindex].isaction)
                actionconfig[runindex].ev();
        };
    })(window, bitadv);


  • 相关阅读:
    P4016 负载平衡问题 网络流
    P3357 最长k可重线段集问题 网络流
    mysql部署
    pve配置
    PVE手册资料
    PVE授权条款
    ovirt磁盘类型(IDE, virtio, virtio-scsi)
    oVirt-postgresql
    ovirt常用后台维护命令
    oVirt部署
  • 原文地址:https://www.cnblogs.com/AI001/p/3996868.html
Copyright © 2011-2022 走看看