XML / Javascript来检测浏览器版本

时间:2012-03-14 08:24:01

标签: javascript html xml cross-browser

我创建了一个XML文件,我试图使用我的网络浏览器访问它。 当我使用IE时,脚本工作得很好,一切都很好,但是当我试图在其他浏览器中打开它时,它不起作用。 经过研究,我了解到它来自我在JavaScript的第一行中与微软连接的ActiveX内容 这就是我找到另一个应该自动检查浏览器性质的代码的原因:

<script type="text/javascript">
    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else { // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.open("GET", "emp.xml", false);
    xmlhttp.send();
    xmlDoc = xmlhttp.responseXML;

    //function loadXML(xmlFile)
    //{
    //xmlDoc.async="false";
    //xmlDoc.onreadystatechange=verify;
    //xmlDoc.load(xmlFile);
    //xmlObj=xmlDoc.documentElement;
    //}

实际上,只是函数的最后两行足以加载XML文件。编写前两行是为了确保我们稍后可以使用的JavaScript函数来操作XML文件数据,而不对未初始化的对象执行任何功能。因此调用函数* verify() *。

<?php
//function verify()/   
    //{
      // 0 Object is not initialized
      // 1 Loading object is loading data
      // 2 Loaded object has loaded data
      // 3 Data from object can be worked with
      // 4 Object completely initialized
      //if (xmlDoc.readyState != 4)
    //  {
        // return false;
      //}
    //}
?>

loadXML('emp.xml');
alert(xmlDoc.childNodes(0).firstChild.text);
alert(xmlDoc.childNodes(3).childNodes(1).firstChild.text);  

我得到JScript运行时错误访问被拒绝...该怎么办?

我的新代码:                    

if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp = new XMLHttpRequest();
  }
 else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
 }
xmlhttp.open("GET","http://www.multimediaprof.com/test/emp.xml",true);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML; 
alert(xmlDoc.childNodes[1].firstChild.text);
</script>
</head>
</html>

答案是JQUERY,我该如何实施呢?

2 个答案:

答案 0 :(得分:1)

问题是您尝试通过file://协议访问计算机上的文件。这是一种安全风险,大多数浏览器都不允许这样做。

此问题的解决方案是在本地或在线服务器上托管您的文件。

如果您使用的是谷歌浏览器,则可以使用--allow-file-access-from-files标志运行它以使其正常工作。

编辑:我认为你在这里有语法错误:

alert(xmlDoc.childNodes(0).firstChild.text);

childNodes对象是一个数组,而不是一个函数。因此,应使用方括号[],而不是括号()

EDIT2:如果您使用的是jQuery,语法如下:

$.get("file.xml", function(data){
    //Your data is accessible through the data variable here!
    console.log("Data Loaded: " + data);
});

进一步的文件:http://api.jquery.com/jQuery.get/

答案 1 :(得分:1)

<html>

    <body>
        <script type="text/javascript">
            if (window.XMLHttpRequest) {
                xhttp = new XMLHttpRequest();
            } else // for older IE 5/6
            {
                xhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xhttp.open("GET", "/Users/kart2006/Desktop/emp.xml", false);
            xhttp.send("");
            xmlDoc = xhttp.responseXML;

            document.write(xmlDoc.documentElement.nodeName + " loaded");
            var str = xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue;
            alert(str);
        </script>
    </body>

</html>

XML文件:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!-- Edited by XMLSpy® -->
<note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>

    <body>Don't forget me this weekend!</body>
</note>

请记住,我已经在Mac中加载了'emp.xml'文件。在Windows的文件://'

enter image description here enter image description here