Solo lectura

Google Chrome - Foro de ayuda

Esta página web es un archivo de los hilos antiguos de los foros de Google. Más información

Peculiaridades de JavaScript en Chrome

jquijado
25/10/11 1:56
Estoy trabajando en el desarrollo de una aplicación en Internet (que, de hecho, lleva dos años funcionando) que hace un uso intensivo de llamadas, mediante JavaScript, a formularios o páginas de contenidos en nuevas pestañas. La aplicación funciona sin problema en otros navegadores. Sin embargo, en Chrome, cuando se pulsa uno de los enlaces, solo carga la primera página. Si luego se vuelve a pulsar el enlace (u otro) lo ignora directamente. No vuelva a cargar ninguna página. Los enlaces llaman a una función Javascript que carga contenidos en determinados campos ocultos y luego manda un formulario cuyo resultado se abre en otra pestaña. El código Javascript sigue rigurosamente el modelo DOM, con lo que, en principio, no deberia de dar fallos. Como he comentado, en otros navegadores funciona perfectamente.

Me gustaría saber si alguien se ha encontrado con esta situación (u otra similar) y si Chrome presenta alguna peculiaridad específica al respecto.

Gracias a todos.

Respuestas (3)

Alejandro Silvestri
25/10/11 4:14
Nunca encontré bugs en el Javascript de Chrome.  Todas las veces que tuve problemas, fue por errores en el código, o por estar usando alguna función nueva de Javascript que todavía no estaba soportada por Chrome (hace tiempo).  El hecho que funcione en otros navegadores no significa que el código esté bien escrito.

Pero lo que más conviene es que indiques la versión de tu Chrome y sistema operativo.

En segundo lugar andá a la consola con F12, a ver si no salta ningún error.

Si querés y te parece oportuno pegá acá el código del enlace.
jquijado
25/10/11 12:55
Bueno. Lo primero de todo, gracias por responder.
Te cuento. Mi versión de Chrome es 14.0.835.202 m y mi sistema operativo es Windows 7. No obstante, un amigo ha probado el código con Windows XP y Vista y, probablemente, con otras versiones de Chrome (de esto último no estoy seguro) y nota los mismos fallos que yo.

El código que produce el fallo es similar al siguiente:

<?php
        include_once("../includes/config.php"); //Se cargan los datos del acceso a BBDD de MySQL
        $id_de_usuario = $_POST["id_de_usuario"]; //Se recupera este dato desde el script llamante.
        session_start(); //Se abre la sesion actual.
        $id_de_cliente = $_SESSION["id_de_cliente"];

        $matrizDeDocumentos = array();
        $consulta = "SELECT id_de_documento, nombre_de_documento ";
        $consulta .= "FROM maestro_de_documentos ";
        $consulta .= "WHERE id_de_usuario='".$id_de_usuario."' ";
        $consulta .= "AND id_de_cliente='".$id_de_cliente."';";
        $hacerConsulta .= mysql_query($consulta, $conexion); //La conexion procede de config.php
        while ($doc = mysql_fetch_assoc($hacerConsulta)) $matrizDeDocumentos[] = $doc;
        mysql_free_result($hacerConsulta);
?>
<!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">
<head>
        <script language="JavaScript" type="text/javascript">
                function enviar(id){
                        document.getElementById("id_de_documento").value = id;
                        if (id > 10) {
                                document.getElementById("formulario").target = "_blank";
                        } else {
                                document.getElementById("formulario").target = "marco_auxiliar";
                        }
                        document.getElementById("formulario").submit();
                }
        </script>
</head>
<body>
<?php
        foreach ($matrizDeDocumentos as $doc){
                echo "<a href=\"javascript:enviar('".$doc["id_de_documento"]."')\">";
                echo $doc["nombre_de_documento"];
                echo "</a><br />";
        }
?>
        <form id="formulario" action="mostrar_documento.php" method="post">
                <input type="hidden" name="<?php echo session_name(); ?>" value="<?php echo session_id(); ?>" />
                <input type="hidden" name="id_de_documento" id="id_de_documento" value="" />
        </form>
</body>
</html>

Le he quitado toda la decoración complementaria para facilitarte la lectura. Este ejemplo me produce el mismo fallo que describo. Como ves, el JavaScript encargado de enviar el formulario no puede ser más simple. No es normal que funcione al primer clic sobre un enlace y luego ya no funcione más.

Si tienes alguna sugerencia, te lo agradeceré.
Alejandro Silvestri
25/10/11 17:51
Por lo que veo el script está bien, no usa nada raro, y lo que usa funciona, yo lo he usado en otros scripts he incluso en extensiones.

Te recomiendo mirar directamente la página generada, la que recibe el navegador.  Si bien podés visualizar su código con ctrl+U, a mí me resultan mucho mejor las herramientas de desarrollo que se despliegan con F12: En la console podrás ver errores que hayan producido los scripts.  En scripts podrás ejecutarlos paso a paso y ponerle breakpoints.