malsup / blockui

jQuery BlockUI Plugin
http://jquery.malsup.com/block/
1.69k stars 506 forks source link

Give a document in which the new elements will be created #21

Open LiuLiujeng opened 13 years ago

LiuLiujeng commented 13 years ago

I meet the question in jQuery BlockUI Plugin.I use $(element).block(message) to blocking user interaction in IE, but it returns a exception: WRONG_DOCUMENT_ERR (4). They are not the same document for I execute $(element).block(message) :

$(self.targetWindow.document.body).block('message');

and the BlockUI append DOM Elements(layers) to element:

(line: 228)
var lyr1 = ($.browser.msie || opts.forceIframe) ?
$('<iframe class="blockUI" style="z-index:'+ (z++) 
+';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" 
src="'+opts.iframeSrc+'"></iframe>', doc) : $('<div class="blockUI" style="display:none"></div>');

(line: 277)
var layers = [lyr1,lyr2,lyr3], $par = full ? $('body') : $(el);
$.each(layers, function() {
    this.appendTo($par);
});

It should be gives a document in which the new elements will be created.

add:

(line: 193)
var doc = window.document;
if(typeof el.ownerDocument != 'undefined') {
    doc = el.ownerDocument;
}

change:

(line: 228)
 var lyr1 = ($.browser.msie || opts.forceIframe) ? $('<iframe class="blockUI" style="z-index:'+ (z++) 
+';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" 
src="'+opts.iframeSrc+'"></iframe>', doc) : $('<div class="blockUI" style="display:none"></div>');

var lyr2 = opts.theme ? $('<div class="blockUI blockOverlay ui-widget-overlay" style="z-index:'+ (z++) +';display:none">
</div>', doc) : $('<div class="blockUI blockOverlay" style="z-index:'+ (z++) 
+';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0"></div>');

to:

 var lyr1 = ($.browser.msie || opts.forceIframe) ? $('<iframe class="blockUI" style="z-index:'+ (z++) 
+';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" 
src="'+opts.iframeSrc+'"></iframe>', doc) : $('<div class="blockUI" style="display:none"></div>', doc);

var lyr2 = opts.theme ? $('<div class="blockUI blockOverlay ui-widget-overlay" style="z-index:'+ (z++) +';display:none">
</div>', doc) : $('<div class="blockUI blockOverlay" style="z-index:'+ (z++) 
+';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0"></div>', doc);

(My English is not very good, forgive me if I don't understand.)