【问题标题】:How to correct code so that It will run on all browsers如何更正代码以便它可以在所有浏览器上运行
【发布时间】:2016-05-04 03:15:40
【问题描述】:

我有一个服务器,我正在尝试从 FireFox 中获取实时信息,它工作正常,并且在每个其他浏览器中,由于使用 xml,实时数据没有填充。我了解 chrome 和不允许使用 xml 的东西,但我不知道如何解决这个问题。想知道是否有人可以借用他们的知识来帮助我。这是代码。我认为问题出在函数 loadXMLDoc 的 else if 中,基于 chrome 所说的是错误---xmldoc.load 不是函数。

<SCRIPT language="JavaScript">

// Object to load the live standings
    var xmldoc;
    function loadXMLDoc(xmlurl) {
if (window.ActiveXObject) {
  // code for IE
  xmldoc = new ActiveXObject("Microsoft.XMLDOM");
  xmldoc.onreadystatechange = state_Change
  xmldoc.async = true
  xmldoc.load(xmlurl);
} else if (document.implementation && document.implementation.createDocument) {
  // code for Mozilla, Firefox, Opera, etc.
  xmldoc = document.implementation.createDocument("","",null)
  xmldoc.async = true
        xmldoc.onload = populate
  xmldoc.load(xmlurl)
} else {
  // alert('Your browser cannot handle this script');
}
}
var interval, livetab

function populate() {
livetab = document.getElementById ? document.getElementById('livetable') :        document.all.livetable

// First remove all existing rows from the body
for (var i = livetab.tBodies[0].rows.length - 1; i >= 0; i--) {
    livetab.tBodies[0].deleteRow(i)
}

// Load the rows
if (xmldoc != null) {

   var xn
 // Do the common data here
   xn = xmldoc.getElementsByTagName('track')[0].childNodes[0]
 livetab.caption.innerHTML = (xn == null ? '' : xn.nodeValue)
   xn = xmldoc.getElementsByTagName('server')[0].childNodes[0]
 document.getElementById('server').innerHTML = (xn == null ? '' : xn.nodeValue)
   xn = xmldoc.getElementsByTagName('session')[0].childNodes[0]
 document.getElementById('session').innerHTML = (xn == null ? '' : xn.nodeValue)
   xn = xmldoc.getElementsByTagName('progress')[0].childNodes[0]
 document.getElementById('progress').innerHTML = (xn == null ? '' : xn.nodeValue)

   for ( var row = 0; row < xmldoc.getElementsByTagName('standings').length; row++) {
       // Add rows
       var r = livetab.tBodies[0].appendChild(document.createElement('tr'))
     r.className = 'detail' + (row & 1 ? 'odd' : 'even')
   var c

     c = document.createElement('td')
     c.className = 'col1' + (row & 1 ? 'odd' : 'even')
     xn = xmldoc.getElementsByTagName('position')[row].childNodes[0]
     c.appendChild(document.createTextNode(xn == null ? '' : xn.nodeValue))
     r.appendChild(c)

     c = document.createElement('td')
     c.className = 'col2' + (row & 1 ? 'odd' : 'even')
     xn = xmldoc.getElementsByTagName('driver-name')[row].childNodes[0]
     c.appendChild(document.createTextNode(xn == null ? '' : xn.nodeValue))
     r.appendChild(c)

     c = document.createElement('td')
     c.className = 'col3' + (row & 1 ? 'odd' : 'even')
     xn = xmldoc.getElementsByTagName('vehicle')[row].childNodes[0]
     c.appendChild(document.createTextNode(xn == null ? '' : xn.nodeValue))
     r.appendChild(c)

     c = document.createElement('td')
     c.className = 'col4' + (row & 1 ? 'odd' : 'even')
     xn = xmldoc.getElementsByTagName('best-lap')[row].childNodes[0]
     c.appendChild(document.createTextNode(xn == null ? '' : xn.nodeValue))
     r.appendChild(c)

     c = document.createElement('td')
     c.className = 'col5' + (row & 1 ? 'odd' : 'even')
     xn = xmldoc.getElementsByTagName('behind-leader')[row].childNodes[0]
     c.appendChild(document.createTextNode(xn == null ? '' : xn.nodeValue))
     r.appendChild(c)

     c = document.createElement('td')
     c.className = 'col6' + (row & 1 ? 'odd' : 'even')
     xn = xmldoc.getElementsByTagName('last-lap-time')[row].childNodes[0]
     c.appendChild(document.createTextNode(xn == null ? '' : xn.nodeValue))
     r.appendChild(c)

     c = document.createElement('td')
     c.className = 'col7' + (row & 1 ? 'odd' : 'even')
     xn = xmldoc.getElementsByTagName('laps-led')[row].childNodes[0]
     c.appendChild(document.createTextNode(xn == null ? '' : xn.nodeValue))
     r.appendChild(c)

     c = document.createElement('td')
     c.className = 'col8' + (row & 1 ? 'odd' : 'even')
     xn = xmldoc.getElementsByTagName('total-laps')[row].childNodes[0]
     c.appendChild(document.createTextNode(xn == null ? '' : xn.nodeValue))
     r.appendChild(c)

     c = document.createElement('td')
     c.className = 'col12' + (row & 1 ? 'odd' : 'even')
     xn = xmldoc.getElementsByTagName('finish-status')[row].childNodes[0]
     c.appendChild(document.createTextNode(xn == null ? '' : xn.nodeValue))
     r.appendChild(c)
   }
  }

// Refresh interval
clearInterval(interval)
interval = setInterval("loadXMLDoc('ARCALive?id=livedata')", 6000)
}

window.onload = function() { loadXMLDoc('ARCALive?id=livedata') }
//window.onload = function() { loadXMLDoc('ARCALive/ARCATest.xml') }
</script>

【问题讨论】:

  • Chrome 不允许 XML?从何时起?除非有什么改变,否则我不知道。或者诸如此类。
  • 对不起,我的意思是 Chrome 不允许使用 xml 加载方法。

标签: html xml google-chrome http


【解决方案1】:

你应该使用open()

不加载()

其次,加载不是函数的原因是因为您没有发出 xml 请求,因为 ActiveXObject 在 chrome(和其他一些现代浏览器)中不存在,您必须使用 XMLHttpRequest 而不是使用 document.implementation.createDocument 哪个没有获取 xml 文件,而是创建了一个空的 html/xml 文档

编辑:添加示例:

JS:

function getXML ( url ) {
  var xmlReq = new XMLHttpRequest() || new ActiveXObject('Microsoft.XMLDOM');

  xmlReq.onreadystatechange = function ()
  {
    if ( xmlReq.readyState == 4 && xmlReq.status == 200 )
    {
        createTable( xmlReq.responseXML );
    }
  };

  xmlReq.open("GET", url, true);
  xmlReq.send();
}

function createTable ( xmlDoc ) {
  var table = document.createElement('table');
  var tr;
  var c;

  //you should modify this to work with your xml
  for (var i = 0; i < xmlDoc.childNodes[0].childNodes.length; i++) {
    c = xmlDoc.childNodes[0].childNodes[i];

    tr = document.createElement('tr');

    for (var I = 0; I < c.childNodes.length; I++) {
        tr.innerHTML += "<td>" + c.childNodes[I].innerHTML + "</td>";
    }

    table.appendChild(tr);

  }

  document.body.appendChild(table);
}

test.xml:

<?xml version="1.0" encoding="UTF-8"?>
<tabel>
    <row>
        <test>a</test>
        <test2>ab</test2>
    </row>
    <row>
        <test>b</test>
        <test2>bb</test2>
    </row>
</tabel>

这样做:

getXML('test.xml');

会给你一个看起来有点像这样的表格:

a    ab
b    bb

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多