Vimium: ¿Existe alguna forma de desactivar Vimium en mi página como propietario de un sitio?

Creado en 19 ene. 2017  ·  27Comentarios  ·  Fuente: philc/vimium

Disculpe si esto se responde en alguna parte, pero no pude encontrarlo en las preguntas frecuentes o en el archivo README.

Dirijo un sitio web que utilizan muchos programadores. Algunos usan Vimium, y parece que la extensión intenta actualizar la edición en ciertos elementos de mi página. Esto ha causado algunos errores de JS complicados que son muy difíciles de rastrear, así como mucho dolor para el usuario porque no se dan cuenta de que las fallas se deben al conflicto entre nuestro código y el de Vimium.

¿Hay alguna forma de etiquetar elementos con "si está ejecutando Vimium, no mejore este elemento"? Gracias de antemano por tu respuesta.

Comentario más útil

Solo algunos pensamientos.

¿Deberían los webmasters tener una forma de deshabilitar Vimium?

  • Ventajas: pueden deshabilitar Vimium automáticamente para permitir que los usuarios usen sus aplicaciones de inmediato.
  • Contras: los usuarios se confundirán cuando los atajos de repente no funcionen, esto se puede mitigar informando a los usuarios que Vimium está deshabilitado

¿Deberían los propietarios de sitios web tener una forma de detectar Vimium?

  • Ventajas: pueden pedir a los usuarios que expliquen que Vimium podría interferir con la funcionalidad normal
  • Contras: esto facilita la toma de huellas digitales (pero esto podría ser una causa perdida)

No estoy seguro de si los webmasters deberían tener alguna de las dos habilidades, pero si la tienen, probablemente no deberían depender de detalles de implementación coincidentes. Una solución estandarizada, como la # 2532, podría ser el camino a seguir.

Por ejemplo, una página puede incluir lo siguiente:

<meta name="keybinding" disable="suggest")">
<script>
  document.querySelector('meta[name="keybinding"]').addEventListener('detect', () => {
    console.log('hi vimium user');
  });
</script>

Esto permite al webmaster

  • Detectar Vimium
  • Desactivar Vimium

Vimium tendría que

  • dejar que el usuario configure si desea

    1. ignorar la etiqueta (dejar que la página piense que Vimium no está instalado)

    2. deshabilitar Vimium según la propiedad de deshabilitación de meta

  • comprobar si hay una metaetiqueta y enviarle un evento de detección
  • informar al usuario que la página está deshabilitando Vimium

En teoría, otras extensiones de combinación de teclas también pueden implementar esta interfaz para que los webmasters no tengan que detectar Vimium, cVim, Surfing Keys, Saka Key, VimFx, Vimari, etc. por separado.

Todos 27 comentarios

@vincentwoo ... Actualmente no. Tal característica requeriría un pensamiento cuidadoso.

¿Estás dispuesto a considerar esta función? Si es así, ¿puede decir cuáles son algunas de sus principales preocupaciones? Obviamente, no quiero pisar los dedos de los pies, pero sí quiero ofrecer una mejor experiencia de usuario para mis usuarios que tienen Vimium instalado (lo cual es una sorprendente cantidad de personas).

+1 Esta sería una adición realmente útil.

Puede enviar un mensaje unload falso en DOM listo / carga de ventana, si solo Vimium ha iniciado.

Aquí está mi ejemplo: https://jsfiddle.net/2L36ypys/ , y verá que no puede usar f para activar pistas.

Esto funciona desde que se confirmó adce73cb68f7ca3e3e01ca6fbb08a1008c9c8b90 (2016/04/05).

Por cierto, ¿podría proporcionarnos más pistas y podríamos resolver dichos conflictos?

Yo mismo no soy un usuario de vimium, así que lo instalaré mañana e intentaré tener un informe de error más concreto para usted. Gracias por el fragmento.

De hecho, según las pruebas en https://jsfiddle.net/2L36ypys/1/ , podemos enviar dicho mensaje desde el entorno "host" cuando la página es "loading" , porque Vimium instala su unload detector de eventos antes de todos los demás scripts de página.

Pero mi Vimium ++ no usa este oyente y no existe un método fácil para destruirlo mediante scripts de página.

Así que espero vuestras búsquedas. Una página de prueba donde puede reproducir errores está bien. Muchas gracias.

En relación con esto, hay un proyecto de 2 años para detectar si el usuario está usando Vimium, podría ser útil aquí: https://github.com/EvanHahn/Detect-Vimium

@pimlottc La extensión no ha funcionado durante 1 o 2 años, porque Vimium usa 'shadowDOM' para ocultar sus nodos.

No pude reproducir exactamente el problema que tienen los usuarios de vimium en mi sitio (probablemente porque no uso Vim personalmente). ¿Todavía está sobre la mesa agregar algún tipo de clase CSS específica de vimium a los elementos para pedirle a la extensión que no la aumente?

¿Todavía está sobre la mesa agregar algún tipo de clase CSS específica de vimium a los elementos para pedirle a la extensión que no la aumente?

No estoy seguro de que sea una gran idea.

Seguramente causaría confusión al usuario si Vimium simplemente no funcionara en absoluto en algunos sitios, y los usuarios ya pueden deshabilitar Vimium en su sitio ellos mismos, vea aquí .

Además, si seguimos su idea, probablemente también necesitemos un mecanismo para que los usuarios vuelvan a habilitar Vimium.

Bien. ¿Hay alguna forma de que sepamos al menos si Vimium se ha habilitado? El problema es que los usuarios nos culpan cuando algo se rompe debido a una interacción extraña. Mi servicio ya usa una superficie de edición muy complicada (CodeMirror), así que me gustaría poder hacer algo .

Si Vimium pudiera al menos agregar un artefacto en el DOM de alguna manera, al menos los sitios como el de @vincentwoo al que hace referencia podrían ser _concientes_ de que el usuario tiene Vimium instalado y podrían mostrarle un mensaje recordándole que podría haber comportamientos conflictivos. al combinar una interfaz de usuario compleja en la página web con todas las ofertas de Vimium, o incluso ofrecer ayuda para configurar la aplicación en cuestión o Vimium para resolverlos.

Si Vimium pudiera al menos agregar un artefacto en el DOM de alguna manera ...

Precargamos el Vomnibar en cada página (de nivel superior). Podríamos asignarle una clase o identificación adecuada, supongo.

¡Eso ciertamente ayudaría!

@ smblott-github Mi idea es que Vimium cambie el nombre de su nodo de host de la sombra de <div> a otro nombre, como <vimium-ui> , y luego basta con buscar los hijos de <html> para este nombre de etiqueta. Creo que este nombre de etiqueta de elemento personalizado no será el mismo que el de otros sitios web.

Mi idea es que Vimium cambie el nombre de su nodo de host en la sombra de <div> a otro nombre, como <vimium-ui> , y luego es suficiente buscar los hijos de <html> para este nombre de etiqueta .

Actualmente, esto no es posible debido a este problema de Chromium .

Podrías detectar nuestros recursos accesibles en la web. Por ejemplo:

var xhr = new XMLHttpRequest(),
    vimiumEnabled = false;
xhr.onerror = xhr.onload = function(){vimiumEnabled = xhr.responseText !== "";};
xhr.open("GET","chrome-extension://dbepggeogbaibhgnhhndojpepiihcmeb/content_scripts/vimium.css");
xhr.send()

@ mrmr1993 No quiero crear un elemento "personalizado", solo un HTMLElement con un nombre de etiqueta personalizado. Un nodo HTMLElement es como un HTMLUnknownElement pero aún admite adjuntar un shadowRoot.

Solo algunos pensamientos.

¿Deberían los webmasters tener una forma de deshabilitar Vimium?

  • Ventajas: pueden deshabilitar Vimium automáticamente para permitir que los usuarios usen sus aplicaciones de inmediato.
  • Contras: los usuarios se confundirán cuando los atajos de repente no funcionen, esto se puede mitigar informando a los usuarios que Vimium está deshabilitado

¿Deberían los propietarios de sitios web tener una forma de detectar Vimium?

  • Ventajas: pueden pedir a los usuarios que expliquen que Vimium podría interferir con la funcionalidad normal
  • Contras: esto facilita la toma de huellas digitales (pero esto podría ser una causa perdida)

No estoy seguro de si los webmasters deberían tener alguna de las dos habilidades, pero si la tienen, probablemente no deberían depender de detalles de implementación coincidentes. Una solución estandarizada, como la # 2532, podría ser el camino a seguir.

Por ejemplo, una página puede incluir lo siguiente:

<meta name="keybinding" disable="suggest")">
<script>
  document.querySelector('meta[name="keybinding"]').addEventListener('detect', () => {
    console.log('hi vimium user');
  });
</script>

Esto permite al webmaster

  • Detectar Vimium
  • Desactivar Vimium

Vimium tendría que

  • dejar que el usuario configure si desea

    1. ignorar la etiqueta (dejar que la página piense que Vimium no está instalado)

    2. deshabilitar Vimium según la propiedad de deshabilitación de meta

  • comprobar si hay una metaetiqueta y enviarle un evento de detección
  • informar al usuario que la página está deshabilitando Vimium

En teoría, otras extensiones de combinación de teclas también pueden implementar esta interfaz para que los webmasters no tengan que detectar Vimium, cVim, Surfing Keys, Saka Key, VimFx, Vimari, etc. por separado.

Yo también busco una solución para detectar vimium. La propuesta de @eejdoowad se ve muy bien. Mientras tanto, estoy de acuerdo con @ gdh1995 , un <div> con un id / classname peculiar resolverá inmediatamente el problema por ahora.

A partir de vimium v1.59, a continuación se muestra una función de trabajo, aunque no del todo confiable, debido a la falta de un identificador confiable, si tiene otras extensiones que insertan shadowDom de la forma en que lo hace vimium, se romperá.

function hasVimium () {
  try {
    const shadowRoot = document.querySelector('html > div').shadowRoot;
    return Boolean(shadowRoot.querySelector('style').textContent.match(/vimium/));
  } catch (e) {
    return false;
  }
}

Solo me gustaría decir que me preocuparía si se implementara un mecanismo de detección integrado. Por supuesto, la toma de huellas dactilares siempre se puede hacer con complementos que están cambiando el DOM a menos que uno prohíba el javascript del sitio web, pero al menos no le demos a las personas un objetivo de punto de datos fácil de rastrear ...

Podríamos tener un mecanismo en el que no detectemos Vimium, pero agreguemos, digamos, una metaetiqueta en nuestra página que tenga un mensaje para mostrar en caso de que un usuario de Vimium esté usando la página, con la opción de deshabilitarla. Por lo tanto, Vimium puede evitar la detección trivial y no necesariamente aprendemos nada sobre el usuario.

Esto es bastante necesario para la aplicación en la que trabajo debido a errores como https://github.com/philc/vimium/issues/2504 . El resumen es que con vimium en ejecución, el sitio web comenzará a responder y se volverá más y más lento a medida que se acumulan los controladores de eventos.

Sería bueno que los sitios web pudieran detectar:

  1. Qué versión de vimium se está utilizando
  2. Si vimium está habilitado / deshabilitado / parcialmente deshabilitado (y qué claves).

Y sería bueno si el sitio web pudiera deshabilitar vimium cortésmente de una manera que sea clara para los usuarios (de modo que el ícono de vimium ya no sea azul)

@mgsloan ¿Puede proporcionar una página de ejemplo, por favor? La forma en que se maneja el modo de inserción ha cambiado sustancialmente desde el # 2504.

(No estoy seguro de que los sitios deshabiliten Vimium unilateralmente. Eso podría ser bastante confuso).

@ smblott-github ¡Hola, gracias por la respuesta! De hecho, el problema de rendimiento parece haber desaparecido. ¡Excelente!

Existe un problema en el que algunos comportamientos de entrada son bastante diferentes a cuando vimium está deshabilitado. Preguntaré y veré si podemos compartir la URL.

¡Hola! ¿Existe alguna idea de qué enfoques podrían ser aceptables para los encargados del mantenimiento del proyecto? Estaríamos dispuestos a donar algo de tiempo para hacer esto (algunos usuarios de vimium usan CoderPad) pero no queremos pisar los dedos de los pies.

Creo que el punto clave que espera Vimium es que todos los usuarios lo usen sin ningún dolor o molestia.

Dado que su sitio tiene algunas acciones especiales que son diferentes con Vimium, incluyendo esc en los cuadros de entrada, ¿debería Vimium permitir "excluir" <esc> en su página de opciones?

Si es así, sus usuarios pueden configurarlo manualmente y recuperar las acciones del sitio (actualmente, parece que <esc> no se puede excluir).

Pero no me gusta la idea de que Vimium se desactive al cumplir condiciones especiales. Es un daño al valor de Vimium.

En cuanto a la publicación de la versión de Vimium, aconsejo:

  • una ruta de recursos accesible desde la web que contiene la cadena de versión de Vimium

    • más correcto, pero no adecuado para diferentes variantes de Vimium

    • por ejemplo, hago un "Vimium C", y tiene una ID de extensión diferente y, por lo tanto, URL de recursos diferentes)

  • o una etiqueta especial <meta> , creada por Vimium y que contiene algunas palabras como "Vimium"

    • más fácil de verificar, pero puede ser abusado por malwares

Verificar el div de nivel superior ya no parece funcionar porque ya no está montado hasta que el usuario hace algo.

En otras palabras, en la carga de la página, no hay ningún artefacto en el que confiar.

¿Fue útil esta página
0 / 5 - 0 calificaciones