在我开始这个问题之前,我明白它的每个方面都是错误的.请记住这一点......
我有一个CRM-ish内部网应用程序,带有我在2001年开发的集成软电话.它基本上是一个集合应用程序,它将电话控制与基于Web的前端集成,用于帐户管理.(Genesys电话和基于AS400的集合系统......使用MQSeries)
在我称之为"生命终结"之前,我正试图尽可能地使这个应用程序现代化.作为我对其进行现代化的尝试的一部分,我已经为我的JS功能和UI实现了jQuery和jQuery UI.我不是很疯狂,但它根深蒂固.
现在,输入问题:我们当前使用IE6,应用程序是使用框架构建的.jQuery库的实现从内存的角度揭示了应用程序的筛选性质.它目前在启动时消耗大约75Mb的内存,并在大约2-3小时后增长到150Mb到300Mb.然后浏览器崩溃了.
我已将内存泄漏缩小到帧之间的串扰.我已经在sIEve和Drip中单独测试了页面,并且没有发现泄漏.但访问框架集内的页面,这是一个定时炸弹.
我知道答案是重新设计没有框架的应用程序并开始使用更好的浏览器.有两个问题:
我已经在IE9上对此进行了测试,问题仍然存在,但是更加可控
重新设计应用程序需要大约50万美元和6-12个月.
有谁知道解决"框架泄漏"问题的方法?我知道我没有提供任何代码示例,但我只是在寻找一般知识.我CollectGarbage()
在onload和onunload上为应用程序中的每个页面调用IE 方法,但无济于事.我试过empty()
在jQuery中调用该方法.我已经尝试将document.body
元素的每个孩子都设置为null
.什么都行不通.
我不愿意退出所有这些变化,因为实际上已经实现了一些相当大的成本削减功能.
我已经设法找出发生内存泄漏的情况.我认为这是帧之间的"串扰",但似乎刷新单帧时会发生内存泄漏.
我设置了一个基本框架集,其中包含同一页面的5个实例(我非常确定每个sIEve没有泄漏).
<html>
<head>
<title>Frame Leak Test</title>
</head>
<frameset cols="*" rows="50%,50%" frameborder="1">
<frameset cols="33%,33%,34%" rows="100%">
<frame src="http://npasappgeneqa02/live/" />
<frame src="http://npasappgeneqa02/live/" />
<frame src="http://npasappgeneqa02/live/" />
</frameset>
<frameset cols="50%,50%" rows="100%">
<frame src="http://npasappgeneqa02/live/" />
<frame src="http://npasappgeneqa02/live/" />
</frameset>
</frameset>
</html>
Run Code Online (Sandbox Code Playgroud)
正在加载的索引页面显示sIEve中没有泄漏.
当我在sIEve中加载框架集页面并单击自动刷新时,没有报告内存泄漏.但是,如果我在单个框架上右键单击 - >刷新,则DOM中75%的已加载项目将列为泄漏.
显然,自动刷新相当于F5/shift + F5刷新.这清除了页面的内存.但是当重新加载单个帧时,内存永远不会清除......显然.我的用户必须看到的每个屏幕都会重新加载到主框架中.
我不能简单地刷新框架集,因为框架集中有一个软电话,如果它被刷新或不正确地注销,它将带来Armageddon.
有没有人知道如何控制框架内存而不刷新它?
我经常在我正在查看的某些页面上看到此doctype声明
<!DOCTYPE html>
Run Code Online (Sandbox Code Playgroud)
我做了一些软研究,这是HTML 5 doctype声明.现代浏览器可以解释这一点并强制在标准模式下运行.
我的问题是,我的一些目标用户仍在使用IE6.当我声明这样的doctype声明时,IE6将如何响应.
在这种情况下,我会获得任何利益或损失吗?
谢谢.
TLDR:告诉IE6/7用户以一种不错的方式离开:)同时阻止他们访问所有内容.
基本上我并不需要使用IE7/6下我的web应用程序的人.正在考虑在加载后进行doc.write擦除页面上的消息"抱歉你的浏览器已经过时"有人做过类似的事情并找到了一个友善的方式来告诉他们用更好的浏览器回来吗?
我目前正在使用jquery,因此jquery解决方案可行.
(1)最可靠的方法来检测浏览器?
(2)对用户提供什么的意见?
SCENARIO不是问题
如果需要,他们可以升级!
我有合理的理由这样做,所以保持ontopic的问题,不要发表关于IE6的一般主题的意见和你有多喜欢它.
如果网页的doctype为HTML5.
<!doctype html>
Run Code Online (Sandbox Code Playgroud)
哪种渲染模式适用于IE6?
该document.compatMode告诉CSS1Compat.它看起来是标准模式,而不是怪癖模式.但是,这是真的吗?IE6在创建HTML5术语之前发布.IE6如何识别HTML5 doctype?
我正在显示一堆缩略图并且延迟可能非常高(通过VPN)所以我将所有缩略图发送到单个文件(如精灵)并设置div的CSS背景图像和背景位置属性显示缩略图.我遇到的问题是使用IE6并弄清楚图像何时加载...我正在使用BackgroundImageCache hack:
document.execCommand("BackgroundImageCache",false,true);
Run Code Online (Sandbox Code Playgroud)
要检查图像何时加载,我使用以下代码:
$('<img>').attr('src', 'ThumbSpriteTest.png').load(function() {
$('.Thumbnails').css('background-image', 'url(ThumbSpriteTest.png)');
});
Run Code Online (Sandbox Code Playgroud)
这适用于我尝试过的每个浏览器,除了IE6 ...即使缓存黑客它正在加载图像,触发事件,设置背景图像属性并再次下载图像(我的.Thumbnail元素是空白的,而它重新下载).
在我看来,缓存黑客只是改变了CSS引用的行为,而不是img标签.如何加载背景图像而不下载两次?IE6有可能吗?
编辑:使用:document.execCommand("BackgroundImageCache",true,true);
似乎工作(两个参数都为'true').我在找到有关BackgroundImageCache命令及其参数的任何文档时遇到了问题(我发现了很多使用它来修复CSS问题的例子,但它们都false,true
用作参数而不解释它们)... 赏金对于在BackgroundImageCache命令及其参数上具有良好信息/文档的任何人来说仍然是好的!
(我不知道为什么我因为IE的缺点而浪费了这么多时间后发现一些有用的东西很兴奋)
是否有任何优雅的方式将某种风格应用于<input type="text">
IE6下的所有元素?我可以用一些JavaScript来做,但我想知道是否有一种更优雅的方式.
注意 - 我无法手动将某个类应用于所有文本框.我想避免使用CSS表达式.
我想在文本字段或文本区域中获取所选范围的光标开始和结束位置.我在各种论坛上尝试了很多功能.但是当选择的最后一个字符是新行字符时,JavaScript会在IE6中忽略它.有想法的人吗?
我正准备开始为一个相当大的公司开发新的Web项目.
对于所有用户,例如17,000人,他们都被IE6困住了.他们计划在今年年底之前让所有人都过渡到IE7,但是IT部门正在开始推动这一承诺.
我被要求做的是给项目发起人一些更多的弹药推动.然而,我的魅力政客按钮似乎被打破了.我只是无法想出简单的短语,例如"IE6很糟糕"或"它还需要我一百万小时才能让它在IE6中运行"而且所有这些都可能是真的,但它并没有真的觉得这是一个非常成熟的陈述.
我想我正在寻找的是,某种外行人的解释方式是,我们可以支持IE6,但我需要一些危险工资,并且通过某种确凿证据支持这一事实确实需要更多几个小时让一些东西看起来正确,并在IE6和IE7中工作.
我必须是漂浮物和边缘虫...
如果浮动元素,然后为其指定边距,则会使边距加倍.
解决方法是添加display: inline
元素.这将停止双边距,所有其他浏览器将忽略它,因为只有块级对象可以浮动.
通常在Web开发社区中,您会听到有人抱怨开发IE6.但是,如果您正在使用像jQuery这样强大的JavaScript框架进行开发,那么开发IE6与开发IE7有什么不同?
css ×4
javascript ×4
jquery ×3
browser ×2
html5 ×2
css-sprites ×1
cursor ×1
doctype ×1
frames ×1
html ×1
jquery-ui ×1
position ×1
quirks-mode ×1
xhtml ×1