内部代码,因为广告采用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规范,所以\n这样的不可见字符也会作为dom的一个元素
例如
<div id="t1"><div>1</div></div>
其中t1的DOM子元素是1个
然而
<div id="t1"><div>1<div>
</div>
t1的DOM子元素是2个,因为不可见字符
\n也被作为了一个dom元素
IE不存在这个问题。而且,只要是使用DOM规范的浏览都和火狐一样的效果。