2011-08-09 15 views
18

Anoche, pensé que haría un proyecto rápido para demostrar las capacidades HTML5 y probar algunas cosas. Sin embargo, parece que no puedo entender cómo arrastrar y soltar para trabajar en Safari, mientras que funciona perfectamente en Chrome y Firefox. Más precisamente, parece que el evento de caída no se dispara en Safari, cuando intenta arrastrar una imagen dentro del sitio web al área de colocación. Al mismo tiempo, se activa al arrastrar y soltar un archivo desde el escritorio.Safari 5.1 rompió arrastrar y soltar HTML nativo?

No estoy muy seguro, pero estoy bastante seguro de que cuando probé la misma secuencia de comandos en el trabajo (donde tengo Safari 5.0.2, etc.), se activó el evento de caída (voy a comprobarlo mañana para ser seguro) y me dio los errores relacionados con FileReader que se esperaban. Pero cuando acabo de instalar Safari 5.1 en mi propia PC, solo obtengo dragover, ingreso y dejo eventos (y los dejo también si el archivo fue arrastrado al navegador).

He estado buscando en Google desde hace un tiempo y no parece encontrar un solo ejemplo de arrastrar y soltar que realmente funciona en Safari 5.1. Incluso el dev-centre's sample de Safari no funciona, y mucho menos html5demo.com 1 y html5demo.com 2. Esto me lleva a pensar si el Safari tiene un error, o tal vez han implementado algo obligatorio que no se refleja en el centro de desarrollo (actualizado por última vez en 2009).

El script que estoy tratando de corregir está en my site (lo siento chicos, no hay problema con el código específico para publicar, ya que parece estar roto en otro lugar también).

PD! Podría haber introducido algunos errores en mi propio sitio mientras trataba desesperadamente de arreglar el arrastre y soltarlo en Safari, pero estoy demasiado cansado para arreglarlos ahora mismo.

ACTUALIZACIÓN: acaba de confirmar en el trabajo que el evento de colocación hace fuego en Safari 5.0.2 en Mac OS X.

ACTUALIZACIÓN 2: También confirmó que todo funciona perfectamente bien con Safari 5.0.6 Win 7, la misma computadora que falla con 5.1

+6

Confirmando los errores que OP describe, Safari 5.1 (7534.48.3). Funcionó bien en Chrome. –

+0

Lo mismo para mí: el método de arrastrar y colocar falla en una nueva instalación de Safari 5.1 (7534.50) en Win7 x64, la misma página funcionó bien en la versión anterior (y en Chrome/FF6/IE9). Sin extensiones, caché vacío. –

+0

ejecutando 10.6.8 con Safari 5.1 (6534.50) funciona para mí. 5.1 en Windows 7 hace para. ¿Es un problema de León? –

Respuesta

1

Solo para aclarar: visitó su sitio y no encontró errores. Abrió la consola, no hubo ningún error, y todo parecía funcionar como estaba diseñado. Intenté todos los ejemplos proporcionados sin error.

Todos los ejemplos funcionan bien Safari Version 5.1 (7534.48.3). Lo siento, amigo. Tal vez es una configuración que has cambiado.

me permito sugerir una posibilidad:

Ir a Safari ->Empty Cache... Entonces Safari ->Reset Safari... intente volver a cargar la página.

Probablemente, hay algo en caché que está creando un conflicto. Parece que no hay nada de malo en tu script en lo más mínimo.

Editar

Algunas cosas a comprobar ...

¿Alguno de sus nombres de función que contienen palabras reservadas? He hecho esto, si no hubiera arrojado ningún error, pero simplemente no funcionaría.

He tenido algunos problemas extraños con Safari al no ejecutar métodos escritos como funcName = function(){}.Si puede precisar el método que no está activando (agrego una pequeña función cuando estoy desarrollando DBG llamado que agregaré a continuación - básicamente, si se establece un indicador de depuración, inicia sesión en la consola), puede intente reescribir la función.

// Some sort of boolean flag. 
var debug = true; 

// This is kind of an obvious function, but can be expanded as you like. 
// Little tricks to make life easier. 
function DBG(str) { 
    debug ? console.log(str) : return; 
} 

Sigo pensando que en última instancia, esto se reduce a algo en el almacenamiento en caché incorrecto, pero vale la pena intentarlo.

+0

Sí, todo esto sería cierto si los problemas ocurrieran solo en mi script, pero por alguna razón, a una instalación limpia de Safari no le gusta arrastrar y soltar (ni siquiera la documentación de Safari) muestra). Trataré de reiniciar y vaciar el caché, pero me parece que una cierta combinación de algo causa este error ya que no parezco ser el único (comentario en mi publicación original) que lo experimenta. – zatatatata

+0

Lo que es extraño: estoy ejecutando exactamente la misma copia sin problemas.Lógicamente, si algo se ejecuta según lo diseñado en algunas máquinas, utilizando el mismo software, el problema no debería ser el script o el paquete de software, sino algún aspecto variable que cree un conflicto. Las cosas que tienden a cambiar entre los usuarios son: cachés, configuraciones, extensiones ... Esto trae a colación un buen punto: ¿estás usando extensiones en Safari? Marque 'Safari'->' Preferencias ... 'y busque en la pestaña' Extensiones'. Como la mayoría de las extensiones son JS, puede haber un conflicto. – stslavik

+0

Es una instalación limpia (tampoco versiones anteriores de Safari). Restablecer y vaciar el caché tampoco tuvo ningún efecto, intenté instalar 5.0.6 y todo funcionó a la perfección, pero en 5.1 no tuve suerte. Es probable que siga siendo uno de esos errores misteriosos, que son imposibles de rastrear por los desarrolladores, ya que aparecen en raras ocasiones solo bajo circunstancias ambientales exactas. – zatatatata

5

Estoy usando Safari 5.1.5 (7534.55.3) en una PC con Windows 7 que acabo de instalar el otro día, sin instalaciones previas de Safari y no puedo obtener ninguna de las demostraciones en línea de drag-n-drop HTML5. trabajo.

Estoy trabajando en un proyecto con drag-n-drop y Modernizr me dice que soy bueno para ir con Safari (Modernizr.draganddrop == verdadero), pero cuando de hecho lo dejo, el evento de caída no fuego.

He agregado la eliminación de errores de alerta y nada.

Mi prueba muestra que Safari 5.1.5 (7534.55.3) en un evento de caída de Windows 7 PC está roto. Todos los demás eventos de arrastre parecen funcionar: dragstart, dragend, dragenter, dragleave, dragover.

0

Me encontré con problemas similares, el evento de caída no parecía estar disparando. Safari aparentemente espera que el evento "dragover" también esté atado. Tan pronto como también agregué eso, funcionó. Entonces ... lo estoy compartiendo en caso de que sea relevante.

Mi primer intento:

$(document).bind 
    drop: (e) -> 
    // This never gets fired in safari (does work in chrome) 
    console.log e.originalEvent.dataTransfer.files 
    false 

Mi "FIX":

$(document).bind 
    dragover: (e) -> 
    console.log e 
    false 
    drop: (e) -> 
    // This does get fired (in chrome and safari) 
    console.log e.originalEvent.dataTransfer.files 
    false 
+0

Entiendo que he hecho algo mal para obtener ese -1? Pero no estoy seguro de qué ... ¿Es eso porque mi respuesta se ve fuera del tema? Este fue un problema real que encontré y mi solución. Esta pregunta fue la que surgió en google cuando busqué mi problema. Supongo que otros harán lo mismo, por lo que quería ayudar a los demás. ¿Pero hay alguna forma mejor de que debería haber manejado eso? –

+0

Y leyendo más ... ¿mi respuesta no es el mismo concepto (el suyo es mejor, el mío es el peor) como John Starr Dewars? ¿Quizás el -1 es porque su respuesta es mejor? –

+2

Probablemente algún enemigo de jQuery. Ah, y ¿qué es esa sintaxis yaml-esque que tienes allí? Cuando estés en Roma, habla javascript puro. (Además, trate de no preocuparse por eso. A veces, los puntos son un poco "ruidosos": son oscilaciones y rotondas.) – aaaidan

8

Prueba con Safari 5.1.7 Mac:

Para ver el fuego drop caso, debe manejar el evento dragover y llamar al event.preventDefault().

Aquí está la discusión (bastante entretenido) donde encontré la respuesta:

http://www.quirksmode.org/blog/archives/2009/09/the_html5_drag.html

no sé si esto realmente resuelve el problema porque el sitio del autor de la pregunta (por lo menos a partir de hoy) hace esto . Funciona bien en mi máquina (al igual que las páginas de demostración HTML5). Pero esto puede ayudar a alguien a llegar a este hilo con este problema que no conoce acerca de este detalle de implementación bastante intuitivo.

+0

Llamar a 'event.preventDefault()' me funcionó en Safari 5.1.7 Win 7 x64. –