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

    内部代码,因为广告采用iframe方式加载,所以分为内外代码

    var adinfo = {
        advpostionid: "",
        pageid: "",
        userid:"",
        adcss:"at"
    }
    var win = window;//缩减代码
    var dom = win.document;
    //广告业务配置对象
    adconfig = { 
        //外部配置项
    configitem: [{ name: "autosense_view_adids", val: "" }, { name: "autosense_view_adpositions", val: "" }, { name: "autosense_view_keywordids", val: "" }, { name: "autosense_view_groupindexes", val: "" }, { name: "autosense_view_unionid", val: "" }, { name: "autosense_view_adsiteid", val: "" }, { name: "autosense_view_addomainid", val: "" }, { name: "autosense_view_url", val: "" }, { name: "autosense_view_ip", val: "" }, { name: "autosense_view_areacodeid", val: "" }, { name: "autosense_view_hitkeywordids", val: "" }, { name: "autosense_view_hitkeywordpids", val: "" }],
        kv: new Object,
        //载入配置
        loadConfig: function () {
            var configitems = adconfig.configitem;
            for (var i = 0; i < configitems.length; i++) {
                if (win[configitems[i].name]) {
                    adconfig.configitems[i].val = win[configitems[i].name];
                    adconfig.kv[configitems[i].name] = adconfig.configitems[i].val;               
                };
            };
        }
    };
    function addEvent(domobj, eventType, handler, argsObject) {
        var eventHandler = handler;
        if (argsObject) {
            eventHandler = function (e) {
                handler.call(argsObject, e);//调整事件执行时的对象
                return true;
            };
        };
    //和外部事件绑定不同,因为采用和外部相同的绑定方式后总是会造成事件执行两次,不知道为什么缩写代码会有这样的问题
     if (window.attachEvent)
            domobj.attachEvent("on" + eventType, eventHandler);
        else
            domobj.addEventListener(eventType, eventHandler, false);
    };
    function clickadv(ev) {
        // alert("ie6 is ok");
        var url = "";
        if (!this.original) {
            this.original = this.href;//保存原始href
        };
        url = this.original;//this指向点击的a标签,和事件绑定时的方式有关
        ev = ev || window.event;
        var mx, my;
        if (ev.pageX || ev.pageY) {
            mx = ev.pageX, my = ev.pageY
        } else {
            mx = ev.clientX + document.body.scrollLeft - document.body.clientLeft;
            my = ev.clientY + document.body.scrollTop - document.body.clientTop;
        }
        url = url + "&mx=" + mx + "&my=" + my;
        this.href = url;
       // alert(url);
    };
    var _$c = function (cssname) {
        if (dom.getElementsByClassName)//低版本浏览器不支持此方法
            return dom.getElementsByClassName(cssname);
        else {
            var all = dom.all;
            var objs = new Array;
            for (var i = 0; i < all.length; i++) {
                if (all[i].className == cssname)
                    objs.push(all[i]);
            };
            if (objs.length == 0)
                objs = null;
            return objs;
        };
    };
    function adBindEvent() {
        //var advs = _$c(adinfo.adcss);
        var advs = dom.getElementsByTagName("A");
        if (advs) {
            for (var i = 0; i < advs.length; i++) {
                if (advs[i]) {
                    addEvent(advs[i], "click", clickadv, advs[i]);
                };
            };
        };
    };
    function getAdPositionInfo() {
        var pairs = location.search.substring(1).split("&");
        var count = 0;
        for (var i = 0; i < pairs.length; i++) {
            if (count == 2) break;
            var pos = pairs[i].indexOf('=');
            if (pos == -1) continue;
            var name = pairs[i].substring(0, pos);
            if (name == "posid") {
                adinfo.advpostionid = pairs[i].substring(pos + 1);
                count++;
                continue;
            };
            if (name == "pgid") {
                adinfo.pageid = pairs[i].substring(pos + 1);
                count++;
                continue;
            };
            if (name == "userid") {
                adinfo.userid = pairs[i].substring(pos + 1);
                count++;
                continue;
            };
        };
    };
    function getxy(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 };
    };
    //配置脚本执行过程
    var actionconfig = [{ name: "initadconfig", ev: getAdPositionInfo, isaction: true }, { name: "bindEvent", ev: adBindEvent, isaction: true }];
    //执行
    for (var runindex = 0; runindex < actionconfig.length; runindex++) {
        if (win[actionconfig[runindex].name])
            actionconfig[runindex].isaction = win[actionconfig[runindex].name];
        if (actionconfig[runindex].isaction)
            actionconfig[runindex].ev();
    }

    Firefox使用DOM规范,所以 这样的不可见字符也会作为dom的一个元素

    例如

    <div id="t1"><div>1</div></div>

    其中t1的DOM子元素是1个

    然而

    <div id="t1"><div>1<div>
    </div>
    t1的DOM子元素是2个,因为不可见字符 也被作为了一个dom元素
    IE不存在这个问题。而且,只要是使用DOM规范的浏览都和火狐一样的效果。

  • 相关阅读:
    c++笔试题3
    C++笔试题
    C++编程指南续(10-11)
    C++详解(8-9)
    C++编程指南(6-7)
    C++编程指南续(4-5)
    C++编程指南续
    C++的编程指南
    HPSocket介绍与使用
    WinForm中TreeView控件实现鼠标拖动节点(可实现同级节点位置互换,或拖到目标子节点)
  • 原文地址:https://www.cnblogs.com/AI001/p/3996867.html
Copyright © 2011-2022 走看看