WMD编辑器在加载时冻结Internet Explorer 7 3秒钟

时间:2010-03-29 04:10:05

标签: internet-explorer-7 wmd wmd-editor

我正在使用WMD编辑器的原始代码(而不是Stack Overflow版本),因为我需要在同一页面上有多个它们,而Stack Overflow的版本在内部大量使用元素ID,因为它们不会超过每页一个编辑器实例。

代码在Firefox 3.5等中运行良好。但是,当我在Internet Explorer 8中运行它(在Internet Explorer 7兼容模式下)时,它会冻结整个浏览器大约3秒钟。在新实例出现之前。我尝试使用Internet Explorer的开发工具对其进行分析,似乎代码的缩小版本的第520行上的getWidth()函数一直在占用。但是,当我尝试对返回进行硬编码时(因为它总是返回相同的东西),瓶颈转移到getHeight()函数。

我附加了我用来将其转换为jQuery插件的代码。

jQuery.fn.wmd = function(params) {
    function createInstance(container, params) {
        /* Make sure WMD has finished loading */
        if (!Attacklab || !Attacklab.wmd) {
            alert("WMD hasn't finished loading!");
            return;
        }
        var defaultParams = {
            width    : "600px",
            rows     : 6,
            autogrow : false,
            preview  : false,
            previewDivClassName: "wmd-preview-div"
        };
        if (typeof(params) == "undefined") {
            var params = defaultParams;
        }
        else {
            var params = jQuery.extend({}, defaultParams, params);
        }

        /* Build the DOM elements */
        var textarea = document.createElement("textarea");
        textarea.style.width = params.width;
        textarea.rows = params.rows;
        jQuery(container).append(textarea);

        var previewDiv = document.createElement("div");
        if (params.preview) {
            jQuery(previewDiv).addClass(params.previewDivClassName);
            jQuery(container).append(previewDiv);
        }

        /* Build the preview manager */
        var panes = {input:textarea, preview:previewDiv, output:null};
        var previewManager = new Attacklab.wmd.previewManager(panes);

        /* Build the editor and tell it to refresh the preview after commands */
        var editor = new Attacklab.wmd.editor(textarea,previewManager.refresh);

        /* Save everything so we can destroy it all later */
        var wmdInstance = {ta:textarea, div:previewDiv, ed:editor, pm:previewManager};
        var wmdInstanceId = $(container).attr('postID');
        wmdInstanceProcs.add(wmdInstanceId, wmdInstance);

        if (params.autogrow) {
            // $(textarea).autogrow();
        }
    };

    if (jQuery(this).html().length > 0) {
        var wmdInstanceId = jQuery(this).attr('postID');
        var inst = wmdInstanceProcs.get(wmdInstanceId);
        jQuery(inst.ta).show();
    }
    else {
        createInstance(this, params);
    }
}

jQuery.fn.unwmd = function(params) {
    var wmdInstanceId = $(this).attr('postID');
    var inst = wmdInstanceProcs.get(wmdInstanceId);
    if (inst != null) {
        jQuery(inst.ta).hide();
    }
}

wmdInstanceProcs = function() {
    var wmdInstances = { };
    var getProc = function(wmdInstanceId) {
        var inst = wmdInstances[wmdInstanceId];
        if (typeof(inst) != "undefined") {
            return inst;
        }
        else {
            return null;
        }
    };
    var addProc = function(wmdInstanceId, wmdInstance) {
        wmdInstances[wmdInstanceId] = wmdInstance;
    };
    return {
        add: addProc,
        get: getProc
    };
}();

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

可能冻结加载时间是由于IE 7呈现JavaScript。 Firefox可能在渲染方面更快,因此它会使IE看起来冻结。