jQuery append()进入不与Microsoft Edge一起使用的新窗口
在尝试将克隆内容附加到新窗口时,Microsoft Edge正在抛出“没有支持此类接口”错误。 这是一个例子:
jQuery(document).ready(function() { jQuery('.trigger').click(function() { var target = jQuery(this).data('print_target'); var w = window.open('', '', 'status=no, toolbar=no, menubar=no, location=no'); var print_html = '' + document.getElementsByTagName('title')[0].innerHTML + ' '; w.document.write( print_html ); var ua = window.navigator.userAgent; var ie = true; //.html() required for IE browsers if ( ua.indexOf("MSIE ") != -1) { //console.log('MSIE - Craptastic'); jQuery(w.document.body).append( jQuery( target ).clone( true ).html() ); } else if ( ua.indexOf("Trident/") != -1) { //console.log('IE 11 - Trident'); jQuery(w.document.body).append( jQuery( target ).clone( true ).html() ); } else if ( ua.indexOf("Edge/") != -1 ){ console.log('IE 12 - Edge'); //error: No such interface supported jQuery(w.document.body).append( jQuery( target ).clone( true ).html() ); //works //jQuery(w.document.body).append( 'hey dude, this is some text' ); //works //jQuery(w.document.body).html( jQuery( target ).clone( true ).html() ); } else{ //console.log('proper browser'); jQuery(w.document.body).append( jQuery( target ).clone( true ) ); ie = false; } }); });
这只是Microsoft Edge的一个问题,它适用于所有基于标准的浏览器和IE浏览器7,8,9,10和11. 此线程中也出现了类似的问题但未解决。
这是一个jsfiddle显示什么是: https ://jsfiddle.net/switzerbaden/nhtywLsp/
经过进一步调查,我发现当你的HTML字符串产生多个顶级兄弟元素时,jQuery将创建一个documentFragment。 当Microsoft Edge尝试将documentFragment附加到第二个窗口时,问题就出现了。
现在,我建议您将HTML传递给append方法,该方法只生成一个顶级元素,并从两边修剪白色空间。 这样,我们可以保证jQuery不会尝试附加documentFragment,而是单个元素。
已针对Microsoft Edge提交了一个错误,并且已通知jQuery团队。
我是Microsoft Edge团队的工程师,我看到了您所指的问题。 我将提交一个错误,并进一步调查,但目前,一个解决方法是在目标中只有一个子元素,并在追加时修剪内容:
$(w.document.body).append( // Or, "" + $(target).html() + "" $.trim( $(target).clone(true).html() ) );
经过一些粗略的测试,这似乎解决了这个问题。