2011-05-18 18 views
5

Tengo un código que usa form.submit() para abrir otra ventana cuando hace clic en algo en mi página. Funciona bien en IE 6-8, Firefox y Chrome, y Safari en Mac. Pero en Safari en Windows XP, después de hacer clic en ese algo, ninguno de los demás enlaces que forman form.submit() funciona. Incluso el mismo algo no lo hace. He aquí algunos de los códigos de devolución de llamada para ese botón:Segundo form.submit() no funciona en Safari en XP, funciona en otros navegadores

accessEmployeeViewClicked = function() { 
    var form=document.Form<xsl:value-of select="//PAGE/@NAME" />; 

    form.action = 'ServletName'; 
    form.target = "otherTarget"; 
    form.submit(); 
}; 

La función se accede por el siguiente código:

<a href="#" onclick="accessEmployeeViewClicked();return false;">Access employee's view &gt;&gt;</a> 

puse un punto de interrupción en el Safari depurador integrado, y la segunda vez que se haga clic en él, definitivamente entra en la función accessEmployeeViewClicked(), pero el form.submit(); no hace nada. Según la sugerencia en los comentarios, cambié el formulario. Objetivo a "_blank" pero eso no tuvo ningún efecto.

He mirado en estas preguntas similares:

y trate las sugerencias, y que no ayudan.

+0

¿Seguro - tratar de cambiar 'form.target = "otherTarget";' 'a form.target =" _blank ";' - también muestre los enlaces que ejecutan – mplungjan

+0

El enlace que se ejecuta es, como se podría esperar del anterior 'Access employee's view' –

+0

Cambiar el formulario.objetivo a "_blank" no ayudó. Ni hizo cambiar el onclick a ' "accessEmployeeViewClicked(); return false;"' –

Respuesta

1

Parece que Apple debe ser consciente del problema, ya que se registró en 2009 y supuestamente entró en su sistema de seguimiento de errores "radar", pero no debe preocuparse: https://bugs.webkit.org/show_bug.cgi?id=28633

que implementó el trabajo en torno a partir de ese informe de error, y funcionó:

 form.action = 'ServletName'; 
     // Work around for Safari bug suggested in https://bugs.webkit.org/show_bug.cgi?id=28633 
     if ($.browser.safari) 
     { 
      form.action += '?t=' + new Date().getTime(); 
     } 
     form.target = "otherTarget"; 
     form.submit(); 
+0

Y como puede ver en ese enlace, Apple finalmente ha corregido el error en las últimas versiones de Safari. –

+0

¿Ha notado irritantes problemas de almacenamiento en caché en el safari móvil (iPhone/iPad)? Cuando recibo una actualización de un enlace con un ancla, la página no se actualiza – mplungjan

0

Aquí es una solución más simple - funcionará en todos los navegadores y le dará un valor añadido de una marca de tiempo en el archivo de registro

<form onsubmit="this.ts.value=new Date().getTime()"> 
. 
. 
. 
<input type="hidden" name="ts" value="timestamp" /> 
</form> 

Si tiene la función do la presente, el onsubmit no se activa así que en vez añadir

form.target = "otherTarget"; 
form.ts.value=new Date().getTime() 
form.submit(); 
Cuestiones relacionadas