2009-12-27 209 views
0

我需要帮助让文件在Firefox中运行:我尝试过修改脚本,以便我的文件可以在IE和Firefox中运行,但到目前为止它仍然只能在IE中运行。 (该文件可以在http://www.eyle.org/crosstest.html测试 - 只需在使用IE的文本框中字迈克(不工作在Firefox)。该HTML文档是:XML跨浏览器支持

<!DOCTYPE html PUBLIC 
    "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>Untitled Document</title> 
    <script type="text/javascript"> 
     var xmlDoc; 
     //loads xml using either IE or firefox 
     function loadXmlDoc() 
     { 
      //test for IE 
      if(window.ActiveXObject) 
      { 
       xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 
       xmlDoc.async = false; 
       xmlDoc.load("books2.xml"); 
      } 

      //test for Firefox 
      else if(document.implementation && document.implementation.createDocument) 
      { 
       xmlDoc = document.implementation.createDocument("","",null); 
       xmlDoc.load("books2.xml"); 
      } 
      //if neither 
      else 
      { 
       document.write("xml file did not load"); 
      } 
     } 

     //window.onload = loadXmlDoc(); 
     var subject; 
     //getDetails adds value of txtField to var subject in outputgroup(subject) 
     function getDetails() 
     { 
      //either this or window.onload = loadXmlDoc is needed 
      loadXmlDoc(); 
      var subject = document.getElementById("txtField1").value; 
      function outputgroup(subject) 
      { 
       var xslt = new ActiveXObject("Msxml2.XSLTemplate"); 
       var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument"); 
       var xslProc; 
       xslDoc.async = false; 
       xslDoc.resolveExternals = false; 
       xslDoc.load("contains3books.xsl"); 
       xslt.stylesheet = xslDoc; 
       xslProc = xslt.createProcessor(); 
       xslProc.input = xmlDoc; 
       xslProc.addParameter("subj", subject); 
       xslProc.transform(); 
       document.write(xslProc.output); 
      } 
      outputgroup(subject); 
     } 

    </script> 
</head> 

<body> 
    <input type="text" id="txtField1"> 
    <input type="submit" onClick="getDetails(); return false"> 
</body> 
</html> 

该文件包括了Books2.xml和contains3books。 xsl(我已将这些文件的代码放在... ww.eyle.org/books2.xml ... ww.eyle.org/contains3books.xsl)(注意:用...替换... ww。 WWW)

+0

检查FF JavaScript错误控制台,你总是与MS的工作具体'ActiveXObject'在outputgroup()。 – 2009-12-27 08:10:24

+0

您可以考虑使用处理所有跨浏览器检查/差异的Sarissa http://dev.abiss.gr/sarissa/(或其他JavaScript库),并为您提供一个抽象API。 Sarissa专门用来处理XML/XSLT/XPATH的东西。 – 2009-12-27 17:15:53

回答

0

你outputgroup函数使用的ActiveXObject创建以创建一个XSLT这是IE特定

对于Mozilla使用XSLTProcessor中();

如用于Firefox

var processor = new XSLTProcessor(); //create object 

xmlDoc = document.implementation.createDocument("","",null); 
xmlDoc.load("books2.xml"); 

xslDoc.load("contains3books.xsl"); 
xslt.stylesheet = xslDoc; 
processor.importStylesheet(xslDoc);//import a stylesheet 

var output = processor.transformToFragment(xmlDoc); 
+0

谢谢你的建议的代码,但我不知道如何使用这个:尝试将它添加到 //测试火狐 否则,如果(document.implementation && document.implementation.createDocument) { xmlDoc中= document.implementation .createDocument( “”, “”,NULL); xmlDoc.load(“books2.xml”); } 这没有工作,所以试了包括它的内部功能outputgroup(主题) { ... ... } 再没有快乐。然后想知道你的 var output = processor.transformToFragment(xmlDoc); var输出似乎没有在任何地方使用。 因此,仍然希望我的文件在IE和Firefox中都能正常工作。请进一步协助 – 1anthony1 2009-12-27 10:26:24