javascript - 为什么我的 JavaScript XML 处理代码在 Safari 中不起作用?

标签 javascript xml safari cross-browser

我使用以下代码打开 XML 文档。它在 Firefox 和 IE 中工作,但在 Safari 中失败。知道为什么吗?

function crearObjetoXML(archivoXML){
  //--- IE.
  if(window.ActiveXObject){
    xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async="false";
    xmlDoc.load(archivoXML);
    parsearXML();
  //--- FF.
  }else if(document.implementation && document.implementation.createDocument){
    xmlDoc = document.implementation.createDocument("","",null);
    xmlDoc.load(archivoXML);
    xmlDoc.onload = parsearXML;
  }else{
    alert ('Su navegador no puede soportar este script');
  }
}


function parsearXML(){
  numrows = xmlDoc.getElementsByTagName('advertise')[0].childNodes.length;
  lnks1 = new Array(numrows);
  for (var i=0;i<=numrows-1;i++)
  {
    lnks1[i] =  xmlDoc.getElementsByTagName('advertise')[0].getElementsByTagName('item')[i].getAttribute('link'); 
  }

}
crearObjetoXML('../imagerotatorxml.php');

最佳答案

谢谢ysth,您的评论对解决问题很有帮助,如果有人发现它有用,我将放置我的代码,问题在于:document.implementation.createDocument("","",null); Firefox 创建一个 XML 文档,但 Safari 只是在到达这部分时创建一个文档: xmlDoc.load 它失败,因为 safari 无法识别这一点,因此在代码中,如果尝试失败,则意味着 safari 然后进入 catch 并使用正确的函数对于 Safari 和其他一切都是一样的。

var xmlDoc;
function crearObjetoXML(archivoXML){
  //---this is for IE.
  if(window.ActiveXObject){
    xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async="false";
    xmlDoc.load(archivoXML);
    parsearXML();

  }else if(document.implementation && document.implementation.createDocument){
    try{//--- this is for FF, opera and others.
            xmlDoc = document.implementation.createDocument("","",null);
            xmlDoc.load(archivoXML);
            xmlDoc.onload = parsearXML; 
       }
       catch(e){// if the other one fails enters here for Safari                        
            xmlDoc = new XMLHttpRequest();                       
            xmlDoc.open("GET", archivoXML, false);                        
            xmlDoc.send();                        
            xmlDoc=xmlDoc.responseXML; 
            parsearXML(); 
  }else{
    alert ('Su navegador no puede soportar este script');
  }
}


function parsearXML(){
  numrows = xmlDoc.getElementsByTagName('advertise')[0].childNodes.length;
  lnks1 = new Array(numrows);
  for (var i=0;i<=numrows-1;i++)
  {
    lnks1[i] =  xmlDoc.getElementsByTagName('advertise')[0].getElementsByTagName('item')[i].getAttribute('link'); 
  }

}
crearObjetoXML('../imagerotatorxml.php');

关于javascript - 为什么我的 JavaScript XML 处理代码在 Safari 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1806276/

相关文章:

javascript - 代理的 Grunt 问题 - Gruntjs

javascript - 转换对象数组中的值

javascript - 是否可以将类添加到自定义 tinyMCE 按钮?

c# - 如何将日期从 XML 序列化到 C#.NET

java - 文档似乎为空,但我可以获取第一个元素

ios - 移动 Safari 中的 React PWA 图像上传会破坏应用程序吗?

javascript - JS : Compatibility problem with Safari

php中来自mysql数据库的Javascript数组

xml - Response.Return_ 标签中的名称 "return"与 *Result.XMLName 中的名称 "Result"冲突

javascript - 使用Command + Z时如何关闭Safari打开上一页?