2012-05-06 19 views
13

Antecedentes

navegadores modernos acabar con la barra de estado clásico y en lugar de dibujar una pequeña información sobre herramientas en la parte inferior de sus ventanas que muestra el destino del enlace en vuelo estacionario/foco.desactivación de texto de la barra de estado del navegador

Un ejemplo de este comportamiento (en mi caso no deseado) se ilustra en la siguiente captura de pantalla:

http://i.imgur.com/0dAxc.png


Preguntas

  1. ¿Hay una manera portátil para desactivar estos información sobre herramientas?
  2. ¿Me están perdiendo los inconvenientes obvios de hacer esto en mi situación particular?
  3. ¿Es mi intento (ver a continuación) una forma razonable de lograr esto?

Razonamiento

Estoy trabajando en una aplicación web de intranet y me gustaría desactivar este comportamiento para algunas acciones específicas de la aplicación porque francamente, https://server/# todas partes se ve como un ojo-dolorida y es molesto ya que en algunos casos mi aplicación dibuja su propia barra de estado en esa ubicación.


mi intento

No soy un desarrollador web por el comercio, por lo que mi conocimiento es todavía bastante limitada en este dominio.

De todos modos, aquí está mi intento con jQuery:

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <meta charset="utf-8"> 
    <title>Target Tooltip Test</title> 
    <style> 
     a, span.a { 
     color: #F00; 
     cursor: pointer; 
     text-decoration: none; 
     } 

     a:hover, span.a:hover { 
     color: #00F; 
     } 

     a:focus, span.a:focus { 
     color: #00F; 
     outline: 1px dotted; 
     } 
    </style> 
    <script src="http://code.jquery.com/jquery-1.7.2.min.js"></script> 
    <script> 
     $(document).ready(function() { 
     patch(); 
     }); 

     function patch() { 
     $('a').each(function() { 
      var $this = $(this).prop('tabindex', 0); 

      if($this.prop('href').indexOf('#') == -1 || $this.prop('rel').toLowerCase() == 'external') { 
      return; 
      } 

      var $span = $('<span class="a" tabindex="0"></span>'); 

      $span.prop('data-href', $this.prop('href')); 
      $span.text($this.text()); 

      $this.replaceWith($span); 
     }); 

     $('a[rel="external"]').click(function() { 
      window.open($(this).prop('data-href')); 
      return false; 
     }); 

     $('span.a').click(function() { 
      location.href = $(this).prop('data-href'); 
     }).keypress(function(event) { 
      if(event.keyCode == 13) { 
      location.href = $(event.target).prop('data-href'); 
      } 
     }).focus(function() { 
      window.status = ''; // IE9 fix. 
     }); 
     } 
    </script> 
    </head> 
    <body> 
    <ol> 
     <li><a href="http://google.com" rel="external">External Link</a></li> 
     <li><a href="#foo">Action Foo</a></li> 
     <li><a href="#bar">Action Bar</a></li> 
     <li><a href="#baz">Action Baz</a></li> 
     <li><a href="mailto:[email protected]">Email Support</a></li> 
    </ol> 
    </body> 
</html> 

patch() sustituye a todos los enlaces que contienen # (es decir, las acciones específicas de la aplicación en mi caso) con un elemento span, hace que todos los enlaces "externos" Abrir en una nueva pestaña/ventana y no parece romper el manejo del protocolo personalizado.

+0

Bienvenido al desbordamiento de la pila! –

+0

http://stackoverflow.com/questions/876390/reliable-cross-browser-way-of-setting-status-bar-text – j08691

Respuesta

4

¿Hay una forma portátil de desactivar estas informaciones sobre herramientas?

No, a excepción de soluciones como su ejemplo anterior.

¿Me están perdiendo los inconvenientes obvios de hacer esto en mi situación particular?

Parece que se está perdiendo el hecho de que toda la situación es incómoda. ¿Por qué tener enlaces si los va a hacer parecer botones? Solo usa los botones. Para el caso, ¿por qué molestarse con los enlaces si terminas apagándolos de todos modos? Solo usa tramos.

¿Es mi intento (ver a continuación) una forma razonable de lograr esto?

En realidad no es razonable como enfoque general, porque estás eliminando los elementos de anclaje del documento, por lo que cualquier detectores de eventos, etc. expandos, se perderán adjunto. Puede funcionar para su situación específica, pero un enfoque más sensato sería no usar enlaces en primer lugar (ver arriba).


Si todavía está decidido a hacer algo como esto, al menos no reemplace el elemento a. Simplemente elimine su atributo href y configure un detector de eventos como lo hizo en su ejemplo. Ahora ya no es un enlace, por lo que no aparecerá en la barra de estado (pero sigue siendo el mismo elemento, al menos).

+0

Su última sugerencia funciona perfectamente. No sabía que podía hacer eso con elementos 'a' vacíos. – TjB

+0

Si tiene control sobre el marcado, seriamente consideraría hacer que no sean enlaces en primer lugar. Por ejemplo, las acciones que cambian los datos en su aplicación siempre deben pasar por POST en lugar de GET, incluso en aplicaciones de intranet ... si eso es lo que son, deberían ser botones con seguridad. Lo de la barra de estado en sí no es realmente un problema importante, pero podría ser una indicación de un diseño deficiente. –

+0

Gracias por sus sugerencias. Los botones tienen más sentido semántico en la mayoría de mis casos de uso. Voy a jugar con esto. – TjB

1

La información sobre herramientas proporciona una indicación al usuario de dónde un enlace los llevará si hace clic. Es parte de la experiencia de usuario estándar del navegador y será esperada por los usuarios de su sitio. Cambiar esta expectativa porque no crees que se vea bien probablemente genere una experiencia de usuario deficiente. Cualquier contenido mostrado en esa área será visible tan pronto como el usuario deje de pasar el mouse sobre una etiqueta de enlace.

Sé que cualquier enlace que no me diga dónde está me parece sospechoso.

+0

Gracias por darnos una respuesta. Me doy cuenta de que esta no es una buena idea el 99% del tiempo, sin embargo, en mi caso, la mayoría de estos enlaces son acciones que parecen botones y otros elementos de la interfaz de usuario de Windows. Se supone que mi aplicación debe actuar como una aplicación de escritorio, pero en el navegador. Creo que en este caso, está bien desactivar la información sobre herramientas solo para esos elementos por razones estéticas. Los enlaces externos y los protocolos personalizados no se tocan. – TjB

+0

En realidad, no es una buena idea el 100% del tiempo, es por eso que los navegadores han dejado de permitir que la gente arruine el contenido de esa barra de estado. ¿Por qué no lo dejas y ves si alguien se queja? – Bill

+0

No es solo un problema estético. Echa un vistazo a esta captura de pantalla del enlace provisto por j08691 arriba: http://i.imgur.com/mlnYN.png La información sobre herramientas está bloqueando el contenido del sitio. En el caso de una aplicación web que implementa una barra de estado propia, es una razón legítima para deshabilitarla para acciones específicas de la aplicación. De nuevo, los enlaces externos no se tocan. – TjB

1

probar esto

$(this).removeAttr("href"); 
$(this).click(function(){}).mouseover(function(){.........}).etc 
3
<button onclick="window.open('yoururlhere.html','_self')">your link text here</button> 

Tenga en cuenta que esta trata a ctrl-clicks como clics ordinarias y desactiva el botón derecho del ratón. No sé acerca de los clics del medio.

También podría usar "a" y simplemente reemplazar el href con el onclick como en el código anterior, pero cuando lo intenté, mi estilo "a: hover" dejó de funcionar. Aparentemente, una "a" sin un href se considera insoportable, al menos en Firefox. Así que cambié al estilo de "botón" y "botón: hover" y todo estaba bien.

Entiendo que esta solución se considerará una mala práctica, pero en algunas situaciones, por ejemplo, el sitio que estoy haciendo compuesto principalmente por fotos en pantalla completa, la estética triunfa sobre los principios.

1

Esto es lo que hago con jQuery:

 //remove status bar notification... 
     $('a[href]').each(function(){ 
      u = $(this).attr('href'); 
      $(this).removeAttr('href').data('href',u).click(function(){ 
       self.location.href=$(this).data('href'); 
      }); 
     }); 
+0

¿Funciona esto con clic medio/derecho? – Timmmm

+0

No, el ejemplo es solo un clic normal del mouse. Cambiar click() a mousedown() para atrapar todos los botones del mouse, creo. No probado ... Esto tal vez ayude; http://stackoverflow.com/a/2725963/536590 – Daantje

Cuestiones relacionadas