Deshabilitar el comportamiento de arrastre pnetworkingeterminado en los enlaces en iOS Safari

Estoy desarrollando una aplicación web. Estoy intentando deshabilitar la mayor parte del comportamiento pnetworkingeterminado de iOS Safari en los enlaces, así que establezco la propiedad CSS "-webkit-touch-callout" en los enlaces a "none". Sin embargo, sigo notando que si mantengo mi dedo en un enlace por un segundo más o less, luego arrástralo, luego suelta el enlace, el enlace se abrirá en una nueva window. No quiero este comportamiento. Me gustaría que se abra en la misma window o que no haga nada. ¿Alguien sabe cómo hacer que esto suceda?

EDIT: Estoy usando jQuery, así que está bien usar las funciones de event handling events de jQuery si eso simplifica las cosas.

EDIT 2: para algunos enlaces, estoy usando controlleres para anular su comportamiento pnetworkingeterminado. Por ejemplo:

$(".categoryList a").live("click", function(e) { e.preventDefault(); $.get( "someOtherUrl", {someVariable: "someValue"}, function(result) { $(".result").html(render(result)); } ); }); 

Mi código real es más complicado que esto, pero mi punto es que estoy anulando la acción de clic pnetworkingeterminada en algunos enlaces y cualquier solución que use para solucionar este problema no debería interferir con estos controlleres . La solución de Sanooj no funciona para mis propósitos porque la asignación "window.location" siempre networkingirige el browser independientemente de si tengo controlleres para evitar este comportamiento. Tal vez podría decir que no debería usar enlaces para este propósito, pero así es como la aplicación fue antes de comenzar a trabajar en ella y cambiar esto sería un gran proyecto. Me pregunto si hay una manera más fácil y sencilla de solucionar esto.

Por favor, chequee esto

 $('a').live('click', function (event) { event.preventDefault(); window.location = $(this).attr("href"); }); 

Establezca un time de espera antes de cargar el contenido de Ajax y detectar movimientos de los dedos:

  function setupAnchorClicks() { var timer = null; $(".categoryList a").live("click", function(e) { e.preventDefault(); timer = setTimeout(function() { // ... }, 1000); }).live("touchmove", function() { clearTimeout(timer); }); } setupAnchorClicks(); 

Es probable que esto no funcione correctamente porque soy un terrible codificador de javascript, pero tienes la idea 🙂

No sé si esto funcionará, pero en el webkit pnetworkingeterminado (chrome / safari) se establece el atributo ondragstart="return false;" para deshabilitar el comportamiento de arrastre pnetworkingeterminado.

Sé que dijiste que ya lo intentaste, pero podrías estar encontrando un problema de especificidad. Puedes probar algo como esto.

 * { -webkit-touch-callout: none !important; } 

Espero que esto ayude.

Si esto no resuelve tu problema, testing aquí.

Para resolver su problema con la solución de Sanooj, ¿ha intentado llamar a sus propias funciones desde su código sugerido? Por ejemplo:

 $('a').live('click', function(event) { if($(this).hasClass('categoryList')) categoryListSpecificFunction(); event.preventDefault(); window.location = $(this).attr("href"); }); 

No puedo probar esto con una aplicación web en este momento, pero funciona para mí en un browser normal, es decir, evita el comportamiento normal, pero también me permite llamar a funciones específicas basadas en classs.