Bueno, lo que tenemos aquí es un popurrí de funciones, frames y ámbitos de variable. Aunque está claro que el problema son los frames, que es por donde tendríamos que haber empezado.
Lo que está ocurriendo es que miras a ver qué valor tienen las variables
hora,
minuto y
segundo en un frame donde no están definidas, por eso te da
undefined.
Las variables esas ya están definidas dentro de tu frame (dentro de
archivo.js están declaradas), pero en tu frame no has llamado a
iniciar_hora(), luego no tienen valor.
De todas maneras en firefox no me ha funcionado para nada como se espera, no creo que se puedan escribir etiquetas como <html> y <script> en un frame...
Creo que lo más óptimo sería llamar a funciones entre frames: Puedes llamar a una función en la página padre con
parent.tuFuncion(), así no necesitarías tags fuera de body.
Mi consejo es que te libres de los frames cuanto antes... pero prueba este ejemplo:
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<meta http-equiv="Content-type" content="text/html;charset=iso-8859-1" />
<title>Página nueva</title>
</head>
<body>
<iframe name="central"></iframe>
<script type="text/javascript">
<!--
var hora;
var minuto;
var segundo ;
function iniciar_hora() {
alert("inicio hora!");
//extraemos del objeto la hora, minuto y segundo actuales
var fecha = new Date();
hora = fecha.getHours();
minuto = fecha.getMinutes();
segundo = fecha.getSeconds();
return true;
}
function mostrar_hora() {
alert("hora_global = "+hora+"\r\nminuto_global = "+minuto+"\r\nsegundo_global = "+segundo);
}
function comenzar() {
var C;
C='Incio de la experiencia.';
C+='<a href="#" onclick="alert(\'click\'); parent.comenzar2(); return false;"> COMENZAR</a> ';
parent.central.document.write(C); //Muestro el contenido de C por pantalla, en el frame C que es mi frame principal
return true;
}
function comenzar2() {
alert("comenzar2!");
var C;
C='<a href="#" onclick="parent.iniciar_hora(); return false;">iniciar hora </a><br/>';
C+='<a href="#" onclick="parent.mostrar_hora(); return false;">mostrar hora</a>';
parent.central.document.write(C);
parent.iniciar_hora(); // iniciamos
parent.mostrar_hora(); // miramos
return true;
}
comenzar();
// -->
</script>
</body>
</html>
Todo en un mismo documento funciona muy bien (además lo he hecho pensando también en firefox). Así no tienes que preocuparte de ámbitos, todo estará en
parent, ya ya está.
Saludos.