2016-07-26 3 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 Edge, он работает во всех стандартах браузеры и IE браузеров 7,8,9,10 и 11. Аналогичный вопрос был raised in this thread, но не решенных ,

вот jsfiddle показывает, что к чему: https://jsfiddle.net/switzerbaden/nhtywLsp/

ответ

2

После дальнейших исследований, я обнаружил, что JQuery будет создавать DocumentFragment, когда ваш HTML строка дает несколько элементов одноуровневые верхнего уровня. Проблема возникает, когда Microsoft Edge пытается добавить documentFragment во второе окно.

В настоящее время я бы рекомендовал вам передать HTML-код методу append, который дает только один элемент верхнего уровня с белым пространством, обрезанным с обеих сторон. Таким образом, мы гарантируем, что jQuery не будет пытаться добавить documentFragment, но вместо этого один элемент.

Исправлена ​​ошибка с Microsoft Edge, и команда jQuery была уведомлена.


Я инженер в команде Microsoft Edge, и я вижу проблему, о которой вы говорите. Я собираюсь подать ошибку, и расследовать это дальше, но до поры до времени, одна работа вокруг должна иметь только один дочерний элемент в вашей цели, и обрезать содержимое при добавлении:

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

После некоторого беглого тестирования это, похоже, решит проблему.