zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    WEB 应用缓存解析以及使用 Redis 实现分布式缓存
    MVC 架构模式
    用两个栈实现队列
    重建二叉树
    从尾到头打印链表
    替换空格
    二维数组中的查找
    二叉树与线索二叉树
    OpenYurt:延伸原生 Kubernetes 到边缘场景下的落地实践
    开放下载!解锁 Serverless 从入门到实战大“橙”就
  • 原文地址:https://www.cnblogs.com/dudu/p/ie9_rc_crash.html
Copyright © 2011-2022 走看看