Редактор WMD зависает при загрузке Internet Explorer 7 на 3 секунды - PullRequest
0 голосов
/ 29 марта 2010

Я использую оригинальный код редактора WMD (а не версию Stack Overflow), поскольку мне нужно несколько из них на одной странице, а версия Stack Overflow интенсивно использует идентификаторы элементов внутри, поскольку они не будут иметь один экземпляр редактора на страницу.

Код отлично работает в Firefox 3.5 и т. Д. Однако, когда я запускаю его в Internet Explorer 8 (в режиме совместимости с Internet Explorer 7), он останавливает весь браузер примерно на 3 секунды. до появления нового экземпляра. Я попытался профилировать его с помощью инструментов разработки Internet Explorer, и кажется, что функция getWidth() в строке 520 минимизированной версии кода работает все время. Однако, когда я попытался жестко закодировать возврат (поскольку он всегда возвращал одно и то же), узкое место перешло к функции 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 голосов
/ 29 марта 2010

Возможно, зависание во время загрузки связано с тем, что IE 7 отображает JavaScript. Firefox может быть быстрее при рендеринге, поэтому IE кажется зависшим.

...