El cuerpo del delito podéis verlo aquí: http://ccan.eu/mapa
El problema es que estoy utilizando un javascript cuya función es la de simular la pseudo-clase :target en internet explorer: luego el problema está en ie, los demás navegadores funcionan sin ningún problema. El javascript lo saqué de aquí: http://htmldog.com/articles/suckerfish/target/ . Creo que es un código bastante conocido.
Código :
<script type="text/javascript"> function suckerfish(type, tag, parentId) { if (window.attachEvent) { window.attachEvent("onload", function() { var sfEls = (parentId==null)?document.getElementsByTagName(tag):document.getElementById(parentId).getElementsByTagName(tag); type(sfEls); }); } } sfTarget = function(sfEls) { var aEls = document.getElementsByTagName("A"); document.lastTarget = null; for (var i=0; i<sfEls.length; i++) { if (sfEls[i].id) { if (location.hash==("#" + sfEls[i].id)) { sfEls[i].className+=" sftarget"; document.lastTarget=sfEls[i]; } for (var j=0; j<aEls.length; j++) { if (aEls[j].hash==("#" + sfEls[i].id)) aEls[j].targetEl = sfEls[i]; aEls[j].onclick = function() { if (document.lastTarget) document.lastTarget.className = document.lastTarget.className.replace(new RegExp(" sftarget\\b"), ""); if (this.targetEl) this.targetEl.className+=" sftarget"; document.lastTarget=this.targetEl; return true; } } } } } suckerfish(sfTarget, "LI"); </script>
Lo que ocurre es que la navegación a los enlaces del div flotante de la derecha está en el swf, razón por la que no funciona.
Podéis ver cómo debería de funcionar utilizando cualquier navegador que no sea explorer o, desde explorer, pinchando en los enlaces del div de debajo del mapa. Funciona a la perfección cuando se pincha en los enlaces en html, pero no al pinchar en los enlaces dentro del flash --> supongo que es una cuestión de carga del html: el navegador no lee el javascript cuando se pincha en los botones del flash.
Al pinchar en alguno de los botones que aparecen en el flash, un pequeño código en actionscript hace una llamada al script useLocationHash, que está justo antes del script de suckerfish:
Código :
function useLocationHash(sMyHash) { window.location.hash = sMyHash; }
Aquí tienes un ejemplo de cómo son los botones en actionscript:
Código ActionScript :
on (press) { getURL("javascript: useLocationHash('pa2');"); }
Lo hago así en lugar de getURL("#pa2"); porque explorer acaba petando con la url al hash directamente, es otro problema que está documentado. --> http://pearstudios.com/javascript/locationHashAndFlash.html
Bien, todo esto esto es para hacer un highlight a los enlaces de los pdfs, que en cualquier navegador que respete los estándares funciona de maravilla, pero en explorer no, por eso hay que simular la pseudoclase :target dando una clase especial cuando aparece el hash en la url --> .sftarget es la clase.
El problema evidente es que ese código no está pensado para interactuar con flash, y hay que hacer alguna ñapa para que funcione. Mi primera idea ha sido forzar un window.location.reload(); desde flash, pero es una chapuza tremenda (hace una recarga que se ve a un kilómetro) y que también afecta a los navegadores que respetan los estándares, y no funciona del todo bien, pues si bien aplica los estilos a los enlaces a los pdfs, no hace el salto hacia arriba que debería generar el hash # --< puedes ver de lo que te hablo pinchando en los puntos 1 y 14 del flash.
Otra idea fue forzar el window.location.reload(); desde la función en javascript que se invoca desde flash, algo así:
Código :
function useLocationHash(sMyHash) { window.location.hash = sMyHash; window.location.reload(); }
Pero entonces, el problema es el mismo: no funciona bien y me afecta al resto de navegadores.
Creo que la solución es integrar los dos javascript en uno, de tal manera que al invocar useLocationHash desde flash, también se ejecute el código que aplica los estilos. Y aquí es donde estoy perdido: no tengo ni pajolera idea de cómo integrar la función suckerfish dentro useLocationHash, de tal manera que cada vez que se pinche en un botón me haga las dos cosas. Supongo que es porque de javascript lo único que sé es C&P

Espero haberme explicado bien y que al menos sepáis por donde voy.
Muchísimas gracias.
salu2