2016-07-26 9 views
2

クローンされたコンテンツを新しいウィンドウに追加しようとすると、Microsoft Edgeで「このようなインターフェイスはサポートされていません」というエラーがスローされます。次に例を示します。jQuery append()を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 = '<!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; 
     } 
    }); 
}); 

これは、Microsoftのエッジを持つ唯一の問題である、それは同様の問題がraised in this threadをされてますがされていない7,8,9,10および11ベースのブラウザとIEのブラウザは解決すべての規格で動作します。 https://jsfiddle.net/switzerbaden/nhtywLsp/

答えて

2

さらに調査した後、私はあなたのHTML文字列が複数のトップレベル兄弟要素を生成する際にjQueryのドキュメント・を作成することを発見しました:

はここで何何示すjsfiddleです。この問題は、Microsoft EdgeがdocumentFragmentを2番目のウィンドウに追加しようとしたときに発生します。

今のところ、1つのトップレベル要素のみを生成するappendメソッドにHTMLを渡すことをお勧めします。両者から空白を削除します。このようにして、jQueryはdocumentFragmentを追加するのではなく、単一の要素を追加しようとします。

Microsoft Edgeに対してバグが提起され、jQueryチームに通知されました。


私はMicrosoft Edgeチームのエンジニアです。あなたが参照している問題があります。私は、バグを報告し、さらにこれを調査するつもりだが、当分の間、1つの作業は、周りのあなたのターゲットでのみ、単一の子要素を持っているし、追加する場合、コンテンツをトリミングすることです:

<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()) 
); 

いくつかの大まかなテストの後で、これは問題を解決するように見えます。

関連する問題