2016-07-26 14 views
2

Microsoft Edge wirft beim Versuch, geklonten Inhalt in ein neues Fenster einzufügen, eine Fehlermeldung "Keine solche Schnittstelle unterstützt". Hier ein Beispiel:jQuery append() in ein neues Fenster, das nicht mit Microsoft Edge funktioniert

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 = '<!DOCTYPE html><head><title>' + document.getElementsByTagName('title')[0].innerHTML + '</title></head><body></body></html>'; 
     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; 
     } 
    }); 
}); 

Dies ist nur ein Problem mit Microsoft Edge, es funktioniert in allen Standards basierte Browser und IE-Browser 7,8,9,10 und 11. Ein ähnliches Problem raised in this thread war aber nicht behoben .

hier ist ein jsfiddle zeigt, was was ist: https://jsfiddle.net/switzerbaden/nhtywLsp/

Antwort

2

Nach einer weiteren Untersuchung habe ich festgestellt, dass jQuery eine Document erstellen, wenn Sie Ihre HTML-String mehrere Top-Level Geschwisterelemente ergibt. Das Problem tritt auf, wenn Microsoft Edge versucht, das Dokumentfragment an das zweite Fenster anzufügen.

Für jetzt möchte ich Sie ermutigen, HTML an die Append-Methode zu übergeben, die nur ein einziges Top-Level-Element mit von beiden Seiten getrimmtem Leerraum liefert. Auf diese Weise wird sichergestellt, dass jQuery nicht versucht, ein documentFragment, sondern ein einzelnes Element anzuhängen.

Ein Fehler wurde gegen Microsoft Edge gemeldet und das jQuery-Team wurde benachrichtigt.


Ich bin ein Ingenieur im Microsoft Edge-Team, und ich sehe das Problem, auf das Sie sich beziehen. Ich werde einen Fehler in Datei, und untersuche diese weiter, aber für den Augenblick, um eine Arbeit ist nur ein einziges Kind-Element in Ihrem Ziel zu haben, und schneiden Sie den Inhalt beim Anhang:

<div id="my_target"> 
    <div> 
     <!-- move contents in here --> 
    </div> 
</div> 
$(w.document.body).append(
    // Or, "<div>" + $(target).html() + "</div>" 
    $.trim($(target).clone(true).html()) 
); 

Nach einigen oberflächlichen Tests scheint dies das Problem zu beheben.