EStoy a punto de tirar la toalla, y os puedo asegurar que seria la primera vez:
He probado el codigo con i
nnerHTML y con
innerText y nada, sigue dandome undefined.
He hecho una prueba con un codigo muy basico:
Código:
<body>
<div>primero</div>
<div>segundo</div>
<div>tercero</div>
<script type="text/javascript">
var contenidoDiv=document.getElementsByTagName('div')[0].innerHTML;
alert(contenidoDiv);
</script>
</body>
y me funciona en los dos navegadores FF IE.
devolviendome alert(contenidoDiv) el contenido del div=primero
El codigo reformado es:
Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Ejercicio 21 - RSS</title>
<script type="text/javascript">
function getXMLHTTPRequest() {
try {
req = new XMLHttpRequest();
} catch(err1) {
try {
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch (err2) {
try {
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch (err3) {
req = false;
}
}
}
return req;
}
Object.prototype.get = function(etiqueta) {
return this.getElementsByTagName(etiqueta)[0].innerText;
}
var rss = {
canal: {},
items: []
};
window.onload = function(){
document.getElementById('mostrar').onclick = cargaRss;
}
function cargaRss(){
// Obtener URL de RSS
borrarLog();
logg('Averiguar la URL del canal RSS');
var url_original = document.getElementById('url').value;
logg('URL original es ' + url_original);
var url_rss = descubreRss(url_original);
logg('La URL descubierta es ' + url_rss);
// Descargar canal RSS
logg('Descargando canal RSS');
descargaRss(url_rss);
}
function descubreRss(url){
var peticion = getXMLHTTPRequest();
//peticion =getXMLHTTPRequest();
peticion.onreadystatechange = function(){};
peticion.open('GET', 'descubreRss.php?url=' + encodeURIComponent(url), false);
peticion.send(null);
return peticion.responseText;
}
function descargaRss(url){
var peticion = getXMLHTTPRequest();
// peticion =getXMLHTTPRequest();
peticion.onreadystatechange = procesaRss;
peticion.open('GET','temp/proxy.php?url=' + encodeURIComponent(url) + '&ct=text/xml', true);
peticion.send(null);
function procesaRss(){
if (peticion.readyState == 4) {
if (peticion.status == 200) {
var xml = peticion.responseXML;
var canal = xml.getElementsByTagName('channel')[0];
var titulo = canal.getElementsByTagName('title')[0].innerHTML;
rss.canal.titulo = titulo;
if(canal.getElementsByTagName('image').length > 0) {
var url_imagen = canal.getElementsByTagName('image')[0].getElementsByTagName('url')[0].innerHTML;
rss.canal.titulo = '<img src="'+url_imagen+'" />'+rss.canal.titulo;
}
var enlace = canal.getElementsByTagName('link')[0].innerHTML;
rss.canal.enlace = enlace;
var items = xml.getElementsByTagName('item');
for (var i = 0; i < items.length; i++) {
var item = items[i];
//var titulo = item.get('title');
var titulo = item.getElementsByTagName('title')[0].innerHTML;
// alert(titulo);
var enlace = item.getElementsByTagName('link')[0].innerHTML;
var descripcion = item.getElementsByTagName('description')[0].innerHTML;
var fecha = item.getElementsByTagName('pubDate')[0].innerHTML;
rss.items[i] = {
titulo: titulo,
enlace: enlace,
descripcion: descripcion,
fecha: fecha
};
}
muestraRss();
}
}
}
}
function muestraRss(){
document.getElementById('noticias').style.display = 'block';
document.getElementById('titulares').innerHTML = '';
document.getElementById('contenidos').innerHTML = '';
document.getElementById('titulo').innerHTML = '<a href="' + rss.canal.enlace + '">' + rss.canal.titulo + '</a>';
var titulares = document.getElementById('titulares');
for (var i = 0; i < rss.items.length; i++) {
titulares.innerHTML += '<a href="#" onclick="muestraElemento(' + i + ')">' + rss.items[i].titulo + '</a> <br/>';
}
}
function muestraElemento(indice){
var item = rss.items[indice];
var html = "";
html += "<h1><a href=\"" + item.enlace + "\">" + item.titulo + "</a></h1>";
if (item.fecha != undefined) {
html += "<h2>" + item.fecha + "</h2>";
}
html += "<p>" + item.descripcion + "</p>";
document.getElementById("contenidos").innerHTML = html;
}
function logg(mensaje){
document.getElementById('info').innerHTML += mensaje + "<br/>";
}
function borrarLog(){
document.getElementById('info').innerHTML = "";
}
</script>
<style type="text/css">
body { font-family: Arial, Helvetica, sans-serif; }
form { margin: 0; }
#info { margin: 0; font-size: .7em; color: #777; }
#noticias {
position: absolute;
width: 80%;
margin-top: 1em;
border: 2px solid #369;
padding: 0;
display: none;
}
#titulo { background-color: #DDE8F3; padding: .3em; border-bottom: 1px solid #369; }
#titulares { width: 20%; float: left; border: none; border-right: 1px solid #D9E5F2; }
#contenidos { margin-left: 22%; padding: 0px 20px; vertical-align: top; }
#titulo h2 { font-weight: bold; color: #00368F; font-size: 1.4em; margin: 0; }
#titulares ul { list-style: none; margin: 0; padding: 0; }
#titulares ul li { border-bottom: 1px solid #EDEDED; padding: 6px; line-height: 1.4em; }
#titulares a { display: block; font-size: 12px; color: #369; }
#titulares a:hover { text-decoration: none; color: #C00; }
#contenidos h1 { font-weight: bold; color: #00368F; font-size: 1.4em; padding: .2em; margin: .3em 0 0 0; }
#contenidos h2 { font-weight: bold; color: #888; font-size: .9em; padding: .2em; margin: .3em 0 0 0; }
#contenidos p { color: #222; font-size: 1.1em; padding: 4px; line-height: 1.5em; }
</style>
</head>
<body>
<form action="#">
<input type="text" size="40" id="url" value="http://www.microsiervos.com" />
<input type="button" value="Mostrar RSS" id="mostrar" />
<div id="info"></div>
</form>
<div id="noticias">
<div id="titulo"></div>
<div id="titulares"></div>
<div id="contenidos"></div>
</div>
</body>
</html>
y he hecho varias pruebas:
Si insertamos un
alert(canal); despues de
Código:
var canal = xml.getElementsByTagName('channel')[0];
y nos devuelve un
objectElement tanto en FF como en IE
lo que quiere decir que hasta aqui tenemos un objeto del arbol DOM dentro del documento XML que nos devuelve
Si a continuacion ponemos otro
alert(canal.getElementsByTagName('title')[0]);
nos vuelve a dar otro
objectElement. Perdonar que sea tan meticuloso, pero es que quisiera saber que es lo que ocurre aqui.
Entonces no entiendo por que da indefinido al contenido cuando se le agrega el
innerHTML y en el otro scrip de prueba funciona en las mismas circustancias creo. O no?
Una ayudita