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.
@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?
Os proprietários de sites devem ter uma maneira de detectar o Vimium?
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
Vimium teria que
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:
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:
<meta>
, criada pela Vimium e contendo algumas palavras como "Vimium"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
Comentários muito úteis
Apenas alguns pensamentos.
Os webmasters devem ter uma maneira de desativar o Vimium?
Os proprietários de sites devem ter uma maneira de detectar o Vimium?
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:
Isso permite que o webmaster
Vimium teria que
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.