tinyMCEPopup.close轻松让IE 9 RC崩溃
昨天,微软发布了IE 9 RC。我们立即下载安装,测试它浏览博客园的兼容性。在测试中,我们发现使用代码着色功能时,会引起IE 9 RC崩溃。而这个问题在其他浏览器(包含其他版本的IE浏览器)中不存在。
本文主要是分享一下崩溃发生的场景及解决方法。
首先看一下引起崩溃的js代码:
$.ajax({
url: '/ws/UtilService.asmx/CodeHighlight',
data: '{"codeHighlighter":' + $.toJSON(codeHighlighter) + '}',
type: 'post',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
cache: false,
success: function (data) {
tinyMCEPopup.editor.execCommand('mceInsertContent', false, data.d);
tinyMCEPopup.close();
}
});
这是一个很简单的ajax调用代码,客户端将代码文本发送至服务端,服务端将着色后的代码返回给客户端。tinyMCEPopup.editor.execCommand将代码插入到TinyMCE编辑器中,然后通过tinyMCEPopup.close()关闭当前窗口(该方法的代码在tiny_mce_popup.js中)。崩溃就发生在执行tinyMCEPopup.close()的时候。
接着参观一下崩溃场景:
在插入代码窗口,点击提交之后,IE 9 RC立即出现崩溃窗口,见下图:
点击Debug启动VS2010进行调试,可以看到调试信息:
由于知识所限,不能根据调试信息作出进一步分析,这里只是展现一下崩溃现场。
最后,就是解决方法:
将tinyMCEPopup.close放在计时器中执行,代码如下:
$.ajax({
url: '/ws/UtilService.asmx/CodeHighlight',
data: '{"codeHighlighter":' + $.toJSON(codeHighlighter) + '}',
type: 'post',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
cache: false,
success: function (data) {
tinyMCEPopup.editor.execCommand('mceInsertContent', false, data.d);
setTimeout(close, 100);
}
});
function close() {
tinyMCEPopup.close();
}
这个解决方法是我们摸索出来的,问题的真正原因目前还不清楚。
如果想体验一下IE 9 RC崩溃,请用IE9 RC访问:http://www.cnblogs.com/ie9rc_test.htm
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~
2006-02-12 关于回复某个评论的功能小改进
2005-02-12 SQL Server 2000中重命名数据库
2004-02-12 请正确填写你的邮件地址