Vimium: Existe uma maneira de desativar o Vimium em minha página como proprietário de um site?

Criado em 19 jan. 2017  ·  27Comentários  ·  Fonte: philc/vimium

Perdoe-me se isso foi respondido em algum lugar, mas não consegui encontrar no FAQ ou README.

Eu administro um site que muitos programadores usam. Alguns usam o Vimium e parece que a extensão tenta atualizar a edição de certos elementos da minha página. Isso tem causado alguns erros complicados de JS que são muito difíceis de rastrear, bem como muita dor do usuário, porque eles não percebem que as falhas são devido ao conflito entre nosso código e o do Vimium.

Existe uma maneira de marcar elementos com "se você estiver executando o Vimium, não aprimore este elemento"? Obrigado pela sua resposta antecipada.

Comentários muito úteis

Apenas alguns pensamentos.

Os webmasters devem ter uma maneira de desativar o Vimium?

  • Prós: eles podem desativar o Vimium automaticamente para permitir que os usuários usem imediatamente seus aplicativos
  • Contras: os usuários ficarão confusos quando os atalhos de repente não funcionarem. Isso pode ser atenuado informando aos usuários que o Vimium está desativado

Os proprietários de sites devem ter uma maneira de detectar o Vimium?

  • Prós: eles podem solicitar aos usuários que expliquem que o Vimium pode interferir na funcionalidade normal
  • Contras: isso facilita a impressão digital (mas isso já pode ser uma causa perdida)

Não tenho certeza se os webmasters devem ter alguma das habilidades, mas, se tiverem, provavelmente não devem depender de detalhes de implementação coincidentes. Uma solução padronizada, como a # 2532, pode ser o caminho a percorrer.

Por exemplo, uma página pode incluir o seguinte:

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

Isso permite que o webmaster

  • Detectar Vimium
  • Desativar Vimium

Vimium teria que

  • deixe o usuário configurar se

    1. ignorar a tag (deixando a página pensar que o Vimium não está instalado)

    2. desabilite o Vimium com base na propriedade de desabilitar do meta

  • verifique se há uma meta tag e envie um evento de detecção para ela
  • informar ao usuário que a página está desabilitando o Vimium

Em teoria, outras extensões de atalhos de teclado também podem implementar essa interface para que os webmasters não tenham que detectar Vimium, cVim, Surfing Keys, Saka Key, VimFx, Vimari, etc. separadamente.

Todos 27 comentários

@vincentwoo ... Atualmente não. Tal recurso exigiria uma reflexão cuidadosa.

Você está aberto para considerar esse recurso? Em caso afirmativo, você pode dizer quais são algumas de suas principais preocupações? Obviamente, não quero pisar em nada, mas quero oferecer uma experiência de usuário melhor para meus usuários que têm o Vimium instalado (o que é um número surpreendente de pessoas).

1 Esta seria uma adição muito útil.

Você pode enviar uma mensagem unload falsa no carregamento da janela / pronto para DOM - se apenas o Vimium tiver iniciado.

Aqui está meu exemplo: https://jsfiddle.net/2L36ypys/ , e você verá que não pode usar f para ativar dicas.

Isso funciona desde o commit adce73cb68f7ca3e3e01ca6fbb08a1008c9c8b90 (05/04/2016).

BTW, você poderia fornecer mais pistas e podemos resolver esses conflitos.

Eu não sou um usuário vimium, então vou instalá-lo amanhã e tentar ter um relatório de bug mais concreto para você. Obrigado pelo trecho.

Na verdade, de acordo com os testes em https://jsfiddle.net/2L36ypys/1/ , podemos enviar essa mensagem do ambiente "host" quando a página é "loading" , porque o Vimium instala seu unload ouvinte de evento antes de todos os outros scripts de página.

Mas meu Vimium ++ não usa esse ouvinte e não há um método fácil de destruí-lo por scripts de página.

Portanto, estou esperando suas pesquisas. Uma página de teste onde você pode reproduzir erros está apenas OK. Muito obrigado.

Relacionado a isso, existe um projeto de 2 anos para detectar se o usuário está usando o Vimium, pode ser útil aqui: https://github.com/EvanHahn/Detect-Vimium

@pimlottc A extensão não funcionou por 1 ou 2 anos, porque o Vimium usa 'shadowDOM' para ocultar seus nós.

Não consegui reproduzir exatamente o problema que os usuários do vimium têm no meu site (provavelmente porque não uso o Vim pessoalmente). Ainda está em jogo adicionar algum tipo de classe CSS específica do vimium aos elementos para pedir à extensão para não aumentá-lo?

Ainda está em jogo adicionar algum tipo de classe CSS específica do vimium aos elementos para pedir à extensão para não aumentá-lo?

Não tenho certeza se essa é uma ótima ideia.

Com certeza, isso causaria confusão ao usuário se o Vimium simplesmente não funcionasse em alguns sites, e os usuários já pudessem desabilitar o Vimium em seu site, veja aqui .

Além disso, se buscássemos sua ideia, provavelmente também precisaríamos de um mecanismo para que os usuários reativassem o Vimium.

Tudo bem. Existe uma maneira de sabermos pelo menos se o Vimium foi habilitado? O problema é que os usuários nos culpam quando algo quebra devido a uma interação estranha. Meu serviço já usa uma superfície de edição muito complicada (CodeMirror), então gostaria de poder fazer algo .

Se o Vimium pudesse pelo menos adicionar um artefato no DOM de alguma forma, pelo menos sites como @vincentwoo se referindo poderiam ser _cientizados_ que o usuário tem o Vimium instalado e eles poderiam mostrar uma mensagem para o usuário lembrando-os de que podem haver comportamentos conflitantes ao combinar uma interface de usuário complexa na página da web com todas as ofertas do Vimium, ou mesmo oferecer ajuda na configuração do aplicativo em questão ou do Vimium para resolvê-los.

Se o Vimium pudesse pelo menos adicionar um artefato no DOM de alguma forma ...

Nós pré-carregamos o Vomnibar em todas as páginas (de nível superior). Poderíamos atribuir a ele uma classe ou id adequado, eu acho.

Isso certamente ajudaria!

@ smblott-github Minha ideia é que o Vimium renomeie seu nó de host sombra de <div> para outro nome, como <vimium-ui> , e então é apenas o suficiente para pesquisar os filhos de <html> para este nome de tag. Acho que esse nome de tag de elemento personalizado não será o mesmo de outros sites.

Minha ideia é que o Vimium renomeie seu nó de host sombra de <div> para outro nome, como <vimium-ui> , e então é apenas o suficiente para pesquisar os filhos de <html> por este nome de tag .

No momento, isso não é possível devido a este problema do Chromium .

Você pode detectar nossos recursos acessíveis pela web. Por exemplo:

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 Não quero criar um elemento “customizado”, apenas um HTMLElement com um nome de tag customizado. Um nó HTMLElement é como um HTMLUnknownElement mas ainda oferece suporte para anexar um shadowRoot.

Apenas alguns pensamentos.

Os webmasters devem ter uma maneira de desativar o Vimium?

  • Prós: eles podem desativar o Vimium automaticamente para permitir que os usuários usem imediatamente seus aplicativos
  • Contras: os usuários ficarão confusos quando os atalhos de repente não funcionarem. Isso pode ser atenuado informando aos usuários que o Vimium está desativado

Os proprietários de sites devem ter uma maneira de detectar o Vimium?

  • Prós: eles podem solicitar aos usuários que expliquem que o Vimium pode interferir na funcionalidade normal
  • Contras: isso facilita a impressão digital (mas isso já pode ser uma causa perdida)

Não tenho certeza se os webmasters devem ter alguma das habilidades, mas, se tiverem, provavelmente não devem depender de detalhes de implementação coincidentes. Uma solução padronizada, como a # 2532, pode ser o caminho a percorrer.

Por exemplo, uma página pode incluir o seguinte:

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

Isso permite que o webmaster

  • Detectar Vimium
  • Desativar Vimium

Vimium teria que

  • deixe o usuário configurar se

    1. ignorar a tag (deixando a página pensar que o Vimium não está instalado)

    2. desabilite o Vimium com base na propriedade de desabilitar do meta

  • verifique se há uma meta tag e envie um evento de detecção para ela
  • informar ao usuário que a página está desabilitando o Vimium

Em teoria, outras extensões de atalhos de teclado também podem implementar essa interface para que os webmasters não tenham que detectar Vimium, cVim, Surfing Keys, Saka Key, VimFx, Vimari, etc. separadamente.

Eu também procuro uma solução para detectar vimium. A proposta de @eejdoowad parece ótima. Enquanto isso, eu concordo com @ gdh1995 , um <div> com um id / nome de classe peculiar resolverá imediatamente o problema por enquanto.

A partir do vimium v1.59, abaixo está uma função de trabalho, embora não totalmente confiável, devido à falta de um identificador confiável, se você tiver outras extensões que inserem o shadowDom da maneira que o vimium o faz, ele irá quebrar.

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

Eu gostaria apenas de sugerir que ficaria preocupado se um mecanismo de detecção embutido fosse implementado. A impressão digital pode, é claro, sempre ser feita com plug-ins que estão mudando o DOM, a menos que se proíba o javascript do site, mas pelo menos não vamos dar às pessoas um alvo de ponto de dados fácil para rastrear ...

Poderíamos ter um mecanismo onde não detectamos o Vimium, mas adicionamos, digamos, uma metatag em nossa página que tem uma mensagem para ser exibida no caso de um usuário Vimium estar usando a página, com a opção de desativá-la. Assim, o Vimium pode evitar a detecção trivial e não necessariamente aprendemos nada sobre o usuário.

Isso é bastante necessário para o aplicativo em que trabalho por causa de bugs como https://github.com/philc/vimium/issues/2504 . O resumo é que, com o vimium em execução, o site começará responsivo e ficará cada vez mais lento à medida que os manipuladores de eventos se acumulam.

Seria bom se os sites detectassem:

  1. Qual versão de vimium está sendo usada
  2. Se o vimium está habilitado / desabilitado / parcialmente desabilitado (e quais teclas).

E seria bom se o site pudesse desabilitar o vimium educadamente de uma forma que fosse clara para os usuários (de forma que o ícone do vimium não fosse mais azul)

@mgsloan Você pode fornecer uma página de exemplo, por favor? A forma como o modo de inserção é tratado mudou substancialmente desde # 2504.

(Não tenho certeza sobre os sites que desativam o Vimium unilateralmente. Isso pode ser bastante confuso.)

@ smblott-github Olá, obrigado pela resposta! Na verdade, o problema de desempenho parece ter desaparecido. Excelente!

Há um problema em que algum comportamento de entrada é um pouco diferente de quando o vimium está desabilitado. Vou perguntar e ver se podemos compartilhar o url.

Olá! Existe alguma noção de quais abordagens podem ser aceitáveis ​​para os mantenedores do projeto? Estaríamos dispostos a doar algum tempo para fazer isso (alguns usuários de vimium usam CoderPad), mas não queremos pisar em ninguém.

Acho que o ponto-chave esperado pelo Vimium é que todos os usuários o usem sem qualquer dor ou incômodo.

Visto que seu site tem algumas ações especiais que são diferentes com o Vimium, incluindo esc nas caixas de entrada, o Vimium deve permitir "excluir" <esc> em sua página de opções?

Nesse caso, seus usuários podem configurá-lo manualmente e obter as ações do site de volta (atualmente, parece que <esc> não pode ser excluído).

Mas eu não gosto da ideia do Vimium se auto-desativando ao cumprir condições especiais. É um prejuízo para o valor do Vimium.

Quanto à publicação da versão do Vimium, aconselho:

  • um caminho de recurso acessível pela web contendo a string de versão do Vimium

    • mais correto, mas não adequado para diferentes variantes de Vimium

    • por exemplo, eu faço um "Vimium C", e ele tem um ID de extensão diferente e, portanto, URLs de recursos diferentes)

  • ou uma tag especial <meta> , criada pela Vimium e contendo algumas palavras como "Vimium"

    • mais fácil de verificar, mas pode ser abusado por malwares

Verificar o div de nível superior parece não funcionar mais porque ele não está mais montado até que o usuário faça algo.

Em outras palavras, no carregamento da página, não há nenhum artefato no qual confiar

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

Semro picture Semro  ·  3Comentários

benwoodward picture benwoodward  ·  3Comentários

kaldown picture kaldown  ·  3Comentários

haroldcarr picture haroldcarr  ·  4Comentários

Poseiden picture Poseiden  ·  3Comentários