2013-09-19 4 views
5

Что случилось с обработкой XSLT в IE11?Обработка XSLT на IE11?

В IE8/9/10, вы можете использовать:

if (window.ActiveXObject) { 
    var xslt = new ActiveXObject("Msxml2.XSLTemplate"); 
    .... 
} 

В Chrome/Firefox/Safari, вы можете использовать:

else { 
    var xsltProcessor = new XSLTProcessor(); 
} 

Но на IE11, ни один из них не поддерживаются. Кто-нибудь знает, как это можно сделать?

+0

Вы пробовали указать номер версии? 'var xslt = новый объект ActiveXObject (" Msxml2.XSLTemplate.6.0 ");'. –

+0

Ах, извините, только что измененный вопрос - оказывается, что «window.ActiveXObject» проверяет, что сбой в IE11 (но если вы пытаетесь его создать в любом случае, он работает) – gallivantor

+2

стоит отметить, что недавно разработчики Chrome решили удалить их встроенные - в процессоре xslt на том основании, что никто не использует его. См. Https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/zIg2KC7PyH0. В свете этого вы можете подумать, полагаясь на то, что он встроен в браузер. – Spudley

ответ

9

Попробуйте

if (window.ActiveXObject || "ActiveXObject" in window) 

Это работает для меня работа с IE11 и позволил мне создавать объекты ActiveX, так как стандартный старый чек будет обойдена.

+0

Это обнаружит все версии IE 5-11. Если вы хотите только IE 11, попробуйте это: '! (Window.ActiveXObject) &&" ActiveXObject "в окне' – mcw0933

1

Вы можете рассмотреть Saxon CE, процессор XSLT 2.0, полностью реализованный в JavaScript. Это даст вам согласованный API во всех браузерах и позволит вам кодировать с использованием более мощного языка XSLT 2.0, а не 1.0.

+0

Интересная идея, интересно, насколько это сопоставимо с исходными реализациями браузера? – gallivantor

1

Причина, по которой if(window.ActiveXObject) не работает в IE11, объясняется тем, что по какой-то причине window.ActiveXObject стал falsy, хотя он по-прежнему является функцией. Я принял, чтобы быть более явными в моем обнаружении особенностей:

if(window.ActiveXObject !== undefined){ 
    ... 
} 

Этот подход также охватывает случай проверки атрибутов, которые присутствуют, но не устанавливается на truthy значения:

if(document.createElement("span").draggable !== undefined){ 
    ... 
} 
0

Для меня работающий в режиме в IE - 11 решил проблему ....

Примечание: Это может быть не решение, но я был в ситуации, когда один, если мой старый сайт использовал вышеупомянутый код. Но я не в состоянии перекодировать сайт

0

Вы можете использовать («ActiveXObject» в окне), который позволит всем браузерам IE войти в условие if. Exp: -

if ("ActiveXObject" in window) { 
// Internet Explorer For all versions like IE8 , IE9 , IE10 or IE11 etc 
}else{ 
// code for Mozilla, Firefox, Opera, etc. 
     } 
0

Это работает для меня на Chrome/Кромка/Firefox/IE11

function loadXMLDoc(filename) { 
    if (window.ActiveXObject || "ActiveXObject" in window) { 
     xhttp = new ActiveXObject("Msxml2.XMLHTTP"); 
    } else { 
     xhttp = new XMLHttpRequest(); 
    } 
    xhttp.open("GET", filename, false); 
    xhttp.send(""); 
    return xhttp.responseXML; 
} 


if (window.ActiveXObject || "ActiveXObject" in window) { 
    ie(); 
} else { 

    xml = loadXMLDoc("input.xml"); 
    xsl = loadXMLDoc("mmlctop2_0.xsl"); 

    if (document.implementation && document.implementation.createDocument) { 
     xsltProcessor = new XSLTProcessor(); 
     xsltProcessor.importStylesheet(xsl); 
     resultDocument = xsltProcessor.transformToDocument(xml, document); 

     var serializer = new XMLSerializer(); 
     var transformed = serializer.serializeToString(resultDocument.documentElement); 

     alert(transformed); 
    } 
} 

// https://msdn.microsoft.com/en-us/library/ms753809(v=vs.85).aspx 
function ie() { 

    var xslt = new ActiveXObject("Msxml2.XSLTemplate.3.0"); 
    var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.3.0"); 
    var xslProc; 
    xslDoc.async = false; 
    xslDoc.load("mmlctop2_0.xsl"); 
    if (xslDoc.parseError.errorCode != 0) { 
     var myErr = xslDoc.parseError; 
     alert("You have error " + myErr.reason); 
    } else { 
     xslt.stylesheet = xslDoc; 
     var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.3.0"); 
     xmlDoc.async = false; 
     xmlDoc.load("input.xml"); 
     if (xmlDoc.parseError.errorCode != 0) { 
      var myErr = xmlDoc.parseError; 
      alert("You have error " + myErr.reason); 
     } else { 
      xslProc = xslt.createProcessor(); 
      xslProc.input = xmlDoc; 
      xslProc.addParameter("param1", "Hello"); 
      xslProc.transform(); 
      alert(xslProc.output); 
     } 
    } 


} 
Смежные вопросы