上一篇,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 "";elsereturn 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

IE8的 JS 引擎如此不堪(二) - 解决方案相关推荐

  1. JS引擎线程的执行过程的三个阶段(二)

    继续 JS引擎线程的执行过程的三个阶段(一) 内容, 如下: 三. 执行阶段 1. 网页的线程 永远只有JS引擎线程在执行JS脚本程序,其他三个线程只负责将满足触发条件的处理函数推进事件队列,等待JS ...

  2. node.js 学习笔记(二)模板引擎和C/S渲染

    node.js 学习笔记(二)模板引擎和C/S渲染 文章目录 node.js 学习笔记(二)模板引擎和C/S渲染 一.初步实现Apache功能 1.1 使用模板引擎 1.2 在 node 中使用模板引 ...

  3. JS引擎线程的执行过程的三个阶段

    浏览器首先按顺序加载由<script>标签分割的js代码块,加载js代码块完毕后,立刻进入以下三个阶段,然后再按顺序查找下一个代码块,再继续执行以下三个阶段,无论是外部脚本文件(不异步加载 ...

  4. 浏览器内核、排版引擎、js引擎

    [定义] 浏览器最重要或者说核心的部分是"Rendering Engine",可大概译为"渲染引擎",不过我们一般习惯将之称为"浏览器内核" ...

  5. JavaScript/Ajax/JQuery知识点(BOM/DOM/ScriptEngine/JS引擎),JSCore

    捋顺JavaScript底层知识,重点讲解如原型.作用域.执行上下文.变量对象.this.闭包.按值传递.call.apply.bind.new.继承等难点概念??   JS中的继承?JS的原型模式, ...

  6. Turbopack、低代码、Web Compass、JS引擎等话题集结,与32位技术专家相约D2!

    眼看着距离 12 月 17 日至 12 月 18 日 D2 大会现场直播开始,只有不到一周的时间了,小编已经按耐不住想安利的心情,带着本届 D2 全议题与日程安排 Coming! 本届 D2 为期两天 ...

  7. 主流浏览器js 引擎内核市场份额attialx总结vOa9

    原文: http://blog.csdn.net/attilax/article/details/40016... 时间: 2014-10-12 atitit.. 主流浏览器 js 引擎 内核 市场份 ...

  8. java rhino import_java调用javascript :js引擎rhino

    前段时间,在浏览javaeye论坛,看见有人征集如何在java中运行数学表达式. 结果方案五花八门: 1.jakarta commons JEXL. 2.Beanshell 3.Java Math E ...

  9. 关于JS引擎效率的怨念

    本身JS引擎的效率就不咋D,再加上页面JS写得不咋D,那页面浏览就真的很不咋D了,是的,那个新浪某个页面已经卡出翔来了,真的是该稍微优化下JS引擎了. 对了,看看IE8的效率如何... 经过测试,IE ...

最新文章

  1. 在java中重写方法应遵循规则的包括_Java面试题集合篇二
  2. 数据库基础之一--DDL(数据库定义语言),DCL(数据库控制语言)
  3. c++ 计算正弦的近似值_数值计算笔记1·基本知识
  4. 红外测试操作步骤_红外光谱仪操作规程
  5. go语言项目优化(经验之谈)
  6. x86服务器当虚拟化的存储,X86服务器虚拟化实施方案.doc
  7. 【UVA1638】杆子的排列
  8. Handler、Message的简单使用
  9. 日均数据量千万级,MySQL、TiDB 两种存储方案的落地对比
  10. 盘点过去10年美国规模最大科技公司IPO:阿里一直是纪录保持者
  11. Linux进程间通信——消息队列
  12. 「首席看业务架构」商业模式画布
  13. python:实现希尔密码算法(附完整源码)
  14. 树莓派摄像头远程拍照及传输
  15. STIL和WGL的例子文件
  16. 美通企业周刊 | 中国全球化品牌50强榜单发布;酩帝诗威士忌拍出近21万美元天价...
  17. DevExpress XPO 学习笔记
  18. [转] 宝宝出生第一年妈妈最应关心的问题
  19. Vultr Debian系统如何重置ROOT管理员密码
  20. CSS实现幻灯片效果

热门文章

  1. 国内最强算法推荐系统,百度第二,它排第一!
  2. 干点大事!“覆盖25万人的AI资源对接平台”发布,找人、找技术不再难!
  3. CVPR 2019 | 基于密集语义对齐的行人重识别模型:有效解决语义不对齐
  4. Python、TensorFlow、机器学习、深度学习四件套(附免费下载)
  5. 开源!李飞飞团队给机器人打造一条龙训练!人类还能VR监管
  6. PyTorch Mobile已支持Android!
  7. 收藏 | 万字长文带你理解Pytorch官方Faster RCNN代码
  8. C++ Primer 第五版 第6章——函数阅读笔记及习题答案(完整,附C++代码)
  9. 口音与方言语音识别研究进展
  10. 大数据分析实战-信用卡欺诈检测