Всем здравствуйте.
Пишу гаджет для 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>©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());}