在Chrome中使用JavaScript读取XML文件

use*_*066 6 javascript xml xmldom

我需要使用JavaScript加载和读取XML文件.

以下代码在Firefox,IE和Opera中运行良好:

function loadXMLDoc(dname) {
  var xmlDoc

  // Internet Explorer
  try {
    xmlDoc = new ActiveXObject('Microsoft.XMLDOM')
  }
  catch (e) {
    // Firefox, Opera, etc.
    try {
      xmlDoc = document.implementation.createDocument('', '', null)
    }
    catch (e) {
      alert(e.message)
    }
  }

  try {
    xmlDoc.async = false
    xmlDoc.load(dname)
    return xmlDoc
  }
  catch (e) {
    alert(e.message)
  }

  return null
}
Run Code Online (Sandbox Code Playgroud)

但是在Chrome中执行此代码会给我带来以下错误:

对象#没有方法"加载"

kub*_*ube 5

旧版代码

document.implementation.createDocument 在Chrome和Safari上不起作用。

XMLHttpRequest尽可能使用代替:

function loadXMLSync(url) {
  try {
    // Prefer XMLHttpRequest when available
    var xhr = new XMLHttpRequest()
    xhr.open('GET', url, false)
    xhr.setRequestHeader('Content-Type', 'text/xml')
    xhr.send()

    return xmlhttp.responseXML
  }
  catch (e) {
    // XMLHttpRequest not available, fallback on ActiveXObject
    try {
      var activex = new ActiveXObject('Microsoft.XMLDOM')
      activex.async = false
      activex.load(url)

      return activex
    }
    catch (e) {
      // Neither XMLHttpRequest or ActiveXObject are available
      return undefined
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

现代浏览器

如果您以现代浏览器(> IE6)为目标,则只需使用XMLHttpRequest:

function loadXMLSync(url) {
  var xhr = new XMLHttpRequest()

  xhr.open('GET', url, false)
  xhr.setRequestHeader('Content-Type', 'text/xml')
  xhr.send()

  return xhr.responseXML
}
Run Code Online (Sandbox Code Playgroud)