IE8的 JS 引擎如此不堪(二)

上一篇,IE8的JS引擎内存不停增长,是因为动态生成了一个image对象导致的。有了病因,就开始寻找治疗方法。

1、使用一个固定的img对象,但是无法获取地址改变后的图片大小,最总还是放弃;

2、寻找从JS代码上来避免内存泄漏的方法:google各种网站,不论是如何生成再销毁这个img对象,貌似都会泄漏,只好作罢。

3、改用弹窗,使用showModalDialog来显示图片,在Chrome下,弹窗行为与IE不一样,而且还会被拦截……

------ 无法用统一的方案来解决,最后决定使用混合方案,如果是IE,且为10以下版本,采用弹窗,如果是其他浏览器,采用原有弹出层的方案。

因此这样就简单了

JS代码:

 $('a.image').click(function () {
        var src = $(this).attr('href');		
		if($.browser.msie && $.browser.version < 10.0){ // ie10以下的浏览器
			var encUrl = encodeURI(src);
			var url = 'showimg.html?src=' + encUrl + '&rnd=' + Math.random();
			window.showModalDialog(url,'图片显示','dialogWidth:800px;dialogHeight:560px;resizable:yes;center:yes');
		}else{ // 其他浏览器
			showImage(src); // 弹出层的方式
		}
				
        return false;
    });

URL上加上一个随机数是为了避免浏览器缓存窗口用的,不然改了代码也无法刷新,还要清IE缓存;

弹出窗口的HTML代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>图片</title>
</head>

<body style="background:#232323">
<div style="text-align:center;height:560px;">
<table border="0" cellpadding="0" cellspacing="0">
	<tr><td style="width : 800px;height:560px;">
	<img id="img" style="margin:auto; vertical-align: middle;border:2px solid silver;" />
	<td></tr>
</table>
</div>
</body>
<script type="text/javascript">
	function getParameterByName(name)
	{
	  name = name.replace(/[[]/, "\[").replace(/[]]/, "\]");
	  var regexS = "[\?&]" + name + "=([^&#]*)";
	  var regex = new RegExp(regexS);
	  var results = regex.exec(window.location.search);
	  if(results == null)
		return "";
	  else
		return decodeURIComponent(results[1].replace(/+/g, " "));
	}
	
	var url = getParameterByName('src');
	var decUrl = decodeURI(url);
	
	document.getElementById('img').src = decUrl;
</script>
</html>

最开始,打算根据图片大小弹出对话框,发现又会进入到动态生成img对象的陷阱,只好弹出固定大小的对话框,算是折衷方案。在弹出的网页中,希望图片能够居中显示,最开始用JS代码来根据图片大小及窗口高度调整图片位置,结果发现在IE8里面,弹出的窗口中,采用各种方式获取的窗口高度都是0,chrome与IE10都是OK的,#@$@#$!。最后想起来,表格的TD默认不就是垂直居中的么?就改成一个表格,固定好高度,自然就居中了,有的时候,复古也是一种解决方案。

原文地址:https://www.cnblogs.com/mobwiz/p/3177405.html