Pregunta

He escrito este código para intentar enviar una URL como un valor de publicación a la misma página. El código funcionó muy bien en chrome y safari ... pero falla en FF3 e IE (el último no me importa, pero necesito que funcione en Firefox). En FF3 e IE se abre una nueva pestaña en blanco. ¿Qué debo saber acerca de las diferencias entre la forma en que webkit y los otros navegadores manejan el formulario de envío a través de javascript?

El código que estoy usando es este:

function posturl (url) {
        var myForm = document.createElement("form");
        myForm.method="post" ;
        var myInput = document.createElement("input") ;
        myInput.setAttribute("name", "url") ;
        myInput.setAttribute("value", url);
        myForm.appendChild(myInput);
        document.body.appendChild(myForm) ;
        myForm.submit();
        document.body.removeChild(myForm) ;
    }

EDITAR: Tal vez debería agregar que la forma en que está funcionando es que estoy usando el script como href en mis etiquetas de anclaje. Entonces, al hacer clic en el enlace, pasa el parámetro a través de la publicación a la misma página, actualizando el contenido en consecuencia.

¿Fue útil?

Solución

Funciona para mi Firefox 2, Chrome 2. Aquí está mi página de prueba completa:

<!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>
    function posturl (url) {
        var myForm = document.createElement("form");
        myForm.method="post";

        var myInput = document.createElement("input") ;
        myInput.setAttribute("name", "url") ;
        myInput.setAttribute("value", 'http://www.google.com');

        myForm.appendChild(myInput);
        document.body.appendChild(myForm);
        myForm.submit();
        document.body.removeChild(myForm);
    }
    </script>
</head>
<body>
<input type="button" value="posturl()" onclick="posturl()" />
</body>

Debe haber otra cosa (posiblemente relacionada con abrir pestañas en blanco? ¿WTF?) que está rompiendo tu código.

Aquí por qué no funciona en IE.

Otros consejos

Eso debería funcionar en todos los navegadores. Pero en realidad creo que necesitas una window.setTimeout aquí con un valor de 0. Lo que está sucediendo es que estás tratando de acceder a un elemento antes de que JavaScript tenga tiempo para " respirar "

Prueba:

window.setTimeout( function() { 
        myForm.submit();
        document.body.removeChild(myForm);
}, 0 );
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top