jquery.messager.js兼容性问题修改,修复关闭弹出框问题

前段时间有个朋友说弹出框关闭的时候在ie7上是关闭弹出来,在ie9上是关闭整个页面,于是进行测试分析发现是jquery.messager.js的问题

于是我进行的测试...在jquery.messager.js中关闭弹出框调用的方法是this.close

于是我自己写了个html测试

<html>

<script>

function a(){

this.close();

}

this.close=function(){

alert(1);

}

</script>

<body><input type="button" value="测试" onclick="a();"></body>

</html>

结果在ie7上是弹出了alert,但在ie9上却是关闭窗口。于是这印证了一件事....ie7是先查询js脚本...看看有没有叫this.close的方法再执行,ie9是先看看浏览器内置的方法里面有没有close方法想当于调用了window.close()

所以ie7之前可以自己写和浏览器内置方法同名的方法,去覆盖此方法,强制想调用浏览器方法必须用window.方法名

但ie9却不能,只要出现和浏览器内置方法同名的方法...就直接走浏览器内置方法,我们自定义的方法是不会执行的。所以编程的时候要注意


因此jquery.messager.js会造成这种错误主要就是方法名...于是我对使用this和浏览器冲突的地方进行了修改

修改后在本机项目测试...已经没问题,可以直接替代原本的jquery.messager.js而且不会出现兼容性错误

修改后代码如下

( function() {

var ua = navigator.userAgent.toLowerCase();

var is = (ua.match(/\b(chrome|opera|safari|msie|firefox)\b/) || [ '',

'mozilla' ])[1];

var r = '(?:' + is + '|version)[\\/: ]([\\d.]+)';

var v = (ua.match(new RegExp(r)) || [])[1];

//jQuery.browser.is = is;

//jQuery.browser.ver = v;

//jQuery.browser[is] = true;


})();

//信息变量

var messagerjs={};


( function(jQuery) {


/*

* jQuery Plugin - Messager

* Author: corrie Mail: [email protected] Homepage: www.corrie.net.cn

* Copyright (c) 2008 corrie.net.cn

* @license  http://www.gnu.org/licenses/gpl.html [GNU General Public

* License]

* $Date: 2008-12-26

* $Vesion: 1.5 @ how to use and example: Please Open index.html

*/


this.version = '@1.5';

this.layer = {

'width' :200,

'height' :100

};

this.title = '信息提示';

this.time = 4000;

this.anims = {

'type' :'slide',

'speed' :400

};

//不使用this,用animss代替anims

var animss= {

'type' :'slide',

'speed' :400

};

this.timer1 = null;

this.inits = function(title, text) {


if ($("#message").is("div")) {

return;

}

$(document.body)

.prepend(

'<div id="message" style="border:#b9c9ef 1px solid;z-index:100;width:'

+ this.layer.width

+ 'px;height:'

+ this.layer.height

+ 'px;position:absolute; display:none;background:#cfdef4; bottom:0; right:0; overflow:hidden;"><div style="border:1px solid #fff;border-bottom:none;width:100%;height:25px;font-size:12px;overflow:hidden;color:#1f336b;"><span id="message_close" style="float:right;padding:5px 0 5px 0;width:16px;line-height:auto;color:red;font-size:12px;font-weight:bold;text-align:center;cursor:pointer;overflow:hidden;">&times;</span><div style="padding:5px 0 5px 5px;width:100px;line-height:18px;text-align:left;overflow:hidden;">'

+ title

+ '</div><div style="clear:both;"></div></div> <div style="padding-bottom:5px;border:1px solid #fff;border-top:none;width:100%;height:auto;font-size:12px;"><div id="message_content" style="margin:0 5px 0 5px;border:#b9c9ef 1px solid;padding:10px 0 10px 5px;font-size:12px;width:'

+ (this.layer.width - 17)

+ 'px;height:'

+ (this.layer.height - 50)

+ 'px;color:#1f336b;text-align:left;overflow:hidden;">'

+ text + '</div></div></div>');


$("#message_close").click( function() {

// setTimeout('this.close()',1);

setTimeout('messagerjs.close()', 1);

});

$("#message").hover( function() {

clearTimeout(timer1);

timer1 = null;

}, function() {

if (time > 0)

// timer1 = setTimeout('this.close()', time);

timer1 = setTimeout('messagerjs.close()', time);

});


$(window).scroll(

function() {

var bottomHeight =  "-"+document.documentElement.scrollTop;

$("#message").css("bottom", bottomHeight + "px");

});

};


this.show = function(title, text, time) {

if ($("#message").is("div")) {

return;

}

if (title == 0 || !title)

title = this.title;

this.inits(title, text);

if (time >= 0)

this.time = time;

//赋给变量,不使用this

animss=this.anims;

switch (this.anims.type) {

case 'slide':

$("#message").slideDown(this.anims.speed);

break;

case 'fade':

$("#message").fadeIn(this.anims.speed);

break;

case 'show':

$("#message").show(this.anims.speed);

break;

default:

$("#message").slideDown(this.anims.speed);

break;

}

var bottomHeight =  "-"+document.documentElement.scrollTop;

$("#message").css("bottom", bottomHeight + "px");

/**

if ($.browser.is == 'chrome') {

setTimeout( function() {

$("#message").remove();

this.inits(title, text);

$("#message").css("display", "block");

}, this.anims.speed - (this.anims.speed / 5));

}*/

this.rmmessage(this.time);

};


this.lays = function(width, height) {


if ($("#message").is("div")) {

return;

}

if (width != 0 && width)

this.layer.width = width;

if (height != 0 && height)

this.layer.height = height;

}


this.anim = function(type, speed) {

if ($("#message").is("div")) {

return;

}

if (type != 0 && type)

this.anims.type = type;

if (speed != 0 && speed) {

switch (speed) {

case 'slow':

;

break;

case 'fast':

this.anims.speed = 200;

break;

case 'normal':

this.anims.speed = 400;

break;

default:

this.anims.speed = speed;

}

}

}


this.rmmessage = function(time) {

if (time > 0) {

// timer1 = setTimeout('this.close()', time);

timer1 = setTimeout('messagerjs.close()', time);

}

};

//this.close=function(){

messagerjs.close = function() {

switch (animss.type) {

case 'slide':

$("#message").slideUp(animss.speed);

break;

case 'fade':

$("#message").fadeOut(animss.speed);

break;

case 'show':

$("#message").hide(animss.speed);

break;

default:

$("#message").slideUp(animss.speed);

break;

}

;

setTimeout('$("#message").remove();', this.anims.speed);

this.original();

}

this.original = function() {

this.layer = {

'width' :200,

'height' :100

};

this.title = '信息提示';

this.time = 4000;

this.anims = {

'type' :'slide',

'speed' :600

};

};

jQuery.messager = this;

return jQuery;

})(jQuery);



你可能感兴趣的:(ie9,ie7,兼容性,弹出框关闭)