[JS] BlockUI開啟iframe問題

最近發現BlockUI開啟iframe子畫面,在子畫面執行一些操作再unblockUI, 主畫面會暫時無法使用,Google的結果發現是IE下unblockUI會有問題。

最近發現BlockUI開啟iframe子畫面,在子畫面執行一些操作再unblockUI, 主畫面會暫時無法使用,Google的結果發現是IE下unblockUI會有問題。

後來發現unblockUI在移除遮罩時,執行reset方法會迴圈移除物件,此時會造成IE有Memory Leak的問題,須改用discardElement取代remove,就不會造成IE在移除物件延遲的問題,請參考:http://kossovsky.net/index.php/2009/07/ie-memory-leak-jquery-garbage-collector/


// move blocking element back into the DOM where it started
function reset(els,data,opts,el) {
    els.each(function(i,o) {
        // remove via DOM calls so we don't lose event handlers
        if (this.parentNode){
            //this.parentNode.removeChild(this);
            jQuery.discardElement(this); //Prevent IE Memory Leak
        }
    });

    if (data && data.el) {
        data.el.style.display = data.display;
        data.el.style.position = data.position;
        if (data.parent)
            data.parent.appendChild(data.el);
        $(el).removeData('blockUI.history');
    }

    if (typeof opts.onUnblock == 'function')
        opts.onUnblock(el,opts);
};