2009-12-30 5 views
0

Все еще играется с расширением Chrome и имеет небольшую проблему, когда я хочу получить некоторую информацию из файла XML. Вот как XML вид:«Чтение» XML с Javascript

<?xml version='1.0' encoding='utf8'?> 
<objects> 
    <url> 
     <domain>...</domain> 
     <nb_clics>...</nb_clics> 
     <alias>...</alias> 
     <title>...</title> 
     <source>...</source> 
     <description /> 
    </url> 
</objects> 

Я попытался это, но никакого результата:

<html> 
    <head> 
     <style> 
      body { 
       width:160px; 
      } 
      p { 
       font-weight:bold; 
       margin-bottom:0; 
      } 
     </style> 
    </head> 
    <script type="text/javascript"> 
     function DOMImplementation(sUrl, fCallback) { 
      var dom; 
      if(window.ActiveXObject) { 
       dom = new ActiveXObject("Microsoft.XMLDOM"); 
       dom.onreadystatechange = function() { 
        if(dom.readyState == 4) { 
         fCallback(dom); 
        } 
       }; 
      } 
      else if(document.implementation && document.implementation.createDocument) { 
       dom = document.implementation.createDocument("", "", null); 
       dom.onload = function() { 
        fCallback(dom); 
       } 
      } 
      else { 
       alert("ERROR"); 
       return; 
      } 
      dom.load(sUrl); 
     } 

     function shrimit() { 
      var nicknick = localStorage["nick_name"]; 
      var apiapi = localStorage["api_key"]; 
      var yourc = document.getElementById("your"); 

      chrome.tabs.getSelected(null,function(tab) { 
       var tablink = tab.url; 
       if(!nicknick || !apiapi){ 
        yourc.setAttribute("value","Set the options"); 
       } else { 
        DOMImplementation("post.xml", getData); 
        function getData(oData) { 
         var tablink2 = oData.getElementsByTagName("alias")[0].firstChild.data; 
         yourc.setAttribute("value",tablink2); 
        } 
       } 
      }); 
     } 
    </script> 
    <body onload="shrimit()"> 
     <input id="your" name="your" type="text" value="" /> 
    </body> 
</html> 

Можете ли вы мне помочь?

+1

Что означает «нет результата»? Вы получаете сообщения об ошибках? –

+2

Если это расширение хром, почему вы используете ActiveX? Это технология IE. Я думаю, вы, вероятно, просто скопировали и вставили какой-то код и не знаете, что именно вы делаете. –

+1

+1 к аффиктеру для холодной твердой истины –

ответ

3

Для загрузки файла XML используйте XMLHttpRequest. Это стандартизировано и надежно в браузерах. document.implementation.createDocument ... load нет.

(Вы можете получить HTMLDocument вместо простого XML-документа Обычно нюхать для DOMParser, прежде чем упасть обратно document.implementation.createDocument Также createDocument('', '', null); недопустим:.... Вы не можете иметь имя корневого элемента пустая строка Используйте createDocument(null, 'name', null) Кроме того, наконец, лучше не использовать имя DOMImplementation, потому что это имя встроенного интерфейса/класса присутствует в Chrome и некоторые другие.)

наконец, используя function заявление внутри else положение является недействительным в JavaScript. Браузеры, как правило, допускают его, но с переменными результатами. Либо объявите функцию на верхнем уровне, либо используйте встроенное выражение функции.

+2

Это для расширения Chrome, ему не нужно ни на что оторваться. Просто используйте то, что доступно в Chrome. –

+1

Да, это работает с этим: var xmlhttp = new XMLHttpRequest(); xmlhttp.open ("GET", "post.xml", false); xmlhttp.send (""); xmlDoc = xmlhttp.responseXML; var tablink2 = xmlDoc.getElementsByTagName ("alias") [0] .childNodes [0] .nodeValue; Спасибо – Axiol

Смежные вопросы