【问题标题】:Why doesn't my JavaScript XML processing code work in Safari?为什么我的 JavaScript XML 处理代码在 Safari 中不起作用?
【发布时间】:2010-12-20 20:20:15
【问题描述】:

我使用以下代码打开一个 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');

【问题讨论】:

  • 嗨:不是 IE 并不一定意味着它是 firefox。恐怕 Safari 使用了另一种关于 javascript 引擎的不同实现。就个人而言,我想使用 jQuery 作为更安全的选择,因为它几乎隐藏了实际的细节。也许 Google for jQuery load xml 文件会帮助您解决这个问题?抱歉,这不是直接回答您的问题。
  • 哪个版本的 safari 不工作? quirksmode.org/dom/w3c_core.html#miscellaneous 显示 safari(那些经过测试的版本)据说有一个工作 document.implementation.createDocument。你可以在quirksmode.org/dom/tests/implementation.html#createDocument()进行测试
  • 我正在使用 Safari 4.0.4(531.21.10)

标签: javascript xml safari cross-browser


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 2019-09-16
    • 2018-12-01
    相关资源
    最近更新 更多