2009-12-27 208 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