网络广告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);


原文地址:https://www.cnblogs.com/AI001/p/3996868.html