Показать сообщение отдельно
  #1 (permalink)  
Старый 10.04.2011, 02:09
Новичок на форуме
Отправить личное сообщение для alesvyat Посмотреть профиль Найти все сообщения от alesvyat
 
Регистрация: 10.04.2011
Сообщений: 2

Гаджет для Windows 7
Всем здравствуйте.

Пишу гаджет для Windows 7 в Visual Studio 2008. Цель его - получение курса доллара и евро с сайта Центробанка.
С помощью стандартного запуска (автоматически используется браузер, установленный по умолчанию; я использую здесь IE (с Ff проблемки некоторые появляются)) выводится абсолютно правильный результат. Однако когда пытаюсь запустить сам гаджет, то отображается лишь первый символ результата; и размер гаджета совершенно не соответствует заявленному в программном описании.
Например, правильный результат: 1 USD = 28,1211 RUB and 1 EUR = 40,4859 RUB
А на самом гаджете выводится "1" (единичка).

В чём может быть проблема?

Ниже представлены коды xml-, html- и JavaScript-файла. Чтение последнего файла может быть затруднено из-за множества комментариев. Но, скорее всего, проблема не в нём...

Возможно, вся проблема заключается в html-файле - там, где написано "onload". Но я без понятий, как это исправить. 3 дня пляшу с бубном, чтоб избавиться от этого, но результат нулевой...

gadget.xml

<?xml version="1.0" encoding="utf-8" ?>
<gadget>
  <name>USD and EUR rates</name>
  <namespace>no</namespace>
  <version>1.0.0.0</version>
  <author name="Alexander V. Svyatkin">
    <info url="facebook.com/alesvyat" />
  </author>
  <copyright>&#169;Alexander V. Svyatkin</copyright>
  <description>Monitors American Dollar and Euro rates</description>
  <icons>
    <icon height="48" width="48" src="" />
  </icons>
  <hosts>
    <host name="sidebar">
      <base type="HTML" apiVersion="1.0.0" src="gadget.html" />
      <permissions>full</permissions>
      <platform minPlatformVersion="1.0" />
      <defaultImage src="images/background.png" />
    </host>
  </hosts>
</gadget>


gadget.html

<html>
<head>
    <title>Untitled Page</title>
    <link href="css/gadget.css"  type="text/css" rel="Stylesheet"/>
    <script src="scripts/gadget.js" type="text/javascript" language="javascript"> </script>
</head>
<body onload="document.write(getUSDandEUR());"> </body>
<div>
    oops, some problem...
</div>
</html>


gadget.js

var currencyURL = "http://www.cbr.ru/scripts/XML_daily_eng.asp";
    var localURL = "XML_daily_eng.asp.xml";
    
    function getXMLDocument(url)  
    {  
        var xml;  
        
        if(window.XMLHttpRequest)  
        {  
            xml = new window.XMLHttpRequest();  
            xml.open("GET", url, false);  
            xml.send("");
            return xml.responseXML;
        }  
        else
            if(window.ActiveXObject)  
            {  
                xml = new ActiveXObject("Microsoft.XMLDOM");  
                xml.async=false;  
                xml.load(url);
                return xml;  
            }  
            else  
            {  
                alert("Browser error");  
                return null;  
            }
         
    }
    
    function getCurrency(url, valuteID)
    {
        //document.writeln(url);
        var xml=null;
        try
        {
            xml = new window.getXMLDocument(url);
            if(!xml) return //document.writeln("<font color='red'>Нет данных</font>");
        } catch(e) {return "<font color='red'>"+e.message+"</font>";}
        //document.writeln("xml document is: " + xml);
        var currencies = xml.getElementsByTagName("Valute");
        //document.writeln("trololo");
        //document.writeln("XML is created");
        //var nominals = xml.getElementsByTagName("Nominal");
        //var values = xml.getElementsByTagName("Value");
        //document.writeln("before if");
        //document.writeln("curencies.length = " + currencies.length);
        if (currencies)
            for(var i = 0; i < currencies.length; i++)
                {
                    var nominals = (currencies[i]).getElementsByTagName("Nominal");
                    var values = (currencies[i]).getElementsByTagName("Value");
                    var charCodes = (currencies[i]).getElementsByTagName("CharCode");
                    var nominal = nominals[0];
                    var value = values[0];
                    var charCode = charCodes[0];
                    
                    //document.writeln("nominals = " + nominal.text);
                    //document.writeln("values = " + value.text);
                    
                    
                    var IDs = currencies[i].getElementsByTagName("ID");
                    var id = null;
                    
                    bool = new Boolean(false);
                    
                    for (var j = 0; j < currencies[i].attributes.length; j++)
                    {
                        var attr = currencies[i].attributes[j];
                        if (attr.name == "ID")
                        {
                            //document.writeln("id is true      ");
                            id = attr.value;
                            //document.writeln("id is " + id);
                            bool = true;
                        }
                        if (bool) break;
                    }
                    bool = false;
                    
                    
                    //ololo
                    /*
                    var id = new Object();
                    //document.writeln("after var id...");
                    if (currencies[i].attributes)
                    {
                        for (var j = 0; j < currencies[i].attributes.length; j++)
                        {
                            var attr = currencies[i].attributes[j];
                            id[attr.name] = attr.value;
                        }
                    }*/
                    
                    if (id == valuteID)
                    {
                        var output = new String (nominal.text + " " + charCode.text + " = " + value.text + " RUB");
                        //document.writeln("nominal = " + nominal.text);
                        //document.writeln("value = " + value.text);
                        
                        //document.writeln(output);
                        //document.writeln ("smth")
                        return output;
                    }
                }
    }
    
    function getUSD()
    {return getCurrency(currencyURL, "R01235");}
    
    function getEUR()
    {return getCurrency(currencyURL, "R01239");}
    
    function getUSDandEUR()
    {return (getUSD() + " and " + getEUR());}
Ответить с цитированием