Vimium: Gibt es eine Möglichkeit, Vimium auf meiner Seite als Websitebesitzer zu deaktivieren?

Erstellt am 19. Jan. 2017  ·  27Kommentare  ·  Quelle: philc/vimium

Verzeihen Sie, wenn dies irgendwo beantwortet wird, aber ich konnte es nicht in den FAQ oder README finden.

Ich betreibe eine Website, die viele Programmierer verwenden. Einige von ihnen verwenden Vimium, und es scheint, dass die Erweiterung versucht, die Bearbeitung bestimmter Elemente auf meiner Seite zu aktualisieren. Dies hat einige knifflige JS-Fehler verursacht, die sehr schwer aufzuspüren sind, sowie eine Menge Benutzerschmerzen, da sie nicht erkennen, dass die Fehler auf den Konflikt zwischen unserem Code und dem von Vimium zurückzuführen sind.

Gibt es eine Möglichkeit, Elemente mit "Wenn Sie Vimium ausführen, verbessern Sie dieses Element bitte nicht" zu markieren? Vielen Dank für Ihre Antwort im Voraus.

Hilfreichster Kommentar

Nur ein paar Gedanken.

Sollten Webmaster eine Möglichkeit haben, Vimium zu deaktivieren?

  • Vorteile: Sie können Vimium automatisch deaktivieren, damit Benutzer ihre Apps sofort verwenden können
  • Nachteile: Benutzer werden verwirrt sein, wenn Verknüpfungen plötzlich nicht funktionieren. Dies kann abgeschwächt werden, indem die Benutzer darüber informiert werden, dass Vimium deaktiviert ist

Sollten Websitebesitzer eine Möglichkeit haben, Vimium zu erkennen?

  • Vorteile: Sie können Benutzer auffordern, zu erklären, dass Vimium die normale Funktionalität beeinträchtigen könnte
  • Nachteile: Dies erleichtert das Abnehmen von Fingerabdrücken (aber dies könnte bereits eine verlorene Sache sein)

Ich bin mir nicht sicher, ob Webmaster über eine der beiden Fähigkeiten verfügen sollten, aber wenn sie dies tun, sollte es sich wahrscheinlich nicht auf zufällige Implementierungsdetails verlassen. Eine standardisierte Lösung wie #2532 könnte der richtige Weg sein.

Eine Seite kann beispielsweise Folgendes enthalten:

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

Damit kann der Webmaster

  • Vimium erkennen
  • Vimium deaktivieren

Vimium müsste

  • Lassen Sie den Benutzer konfigurieren, ob

    1. Ignoriere das Tag (damit die Seite denkt, dass Vimium nicht installiert ist)

    2. Deaktiviere Vimium basierend auf der Deaktivierungseigenschaft von Meta

  • nach einem Meta-Tag suchen und ein Erkennungsereignis an dieses senden
  • den Benutzer darüber informieren, dass die Seite Vimium deaktiviert

Theoretisch können auch andere Keybinding-Erweiterungen diese Schnittstelle implementieren, sodass Webmaster Vimium, cVim, Surfing Keys, Saka Key, VimFx, Vimari usw. nicht separat erkennen müssen.

Alle 27 Kommentare

@vincentwoo... Derzeit nicht. Eine solche Funktion würde einige sorgfältige Überlegungen erfordern.

Sind Sie offen für diese Funktion? Wenn ja, können Sie sagen, was Ihre größten Bedenken sind? Ich möchte natürlich nicht auf die Zehen treten, aber ich möchte meinen Benutzern, die Vimium installiert haben (was ein überraschender Teil der Leute ist), eine bessere Benutzererfahrung bieten.

+1 Dies wäre eine wirklich nützliche Ergänzung.

Sie können eine gefälschte unload Nachricht bei DOM-Ready / Window-Load versenden - wenn nur Vimium initiiert hat.

Hier ist mein Beispiel: https://jsfiddle.net/2L36ypys/ , und Sie werden sehen, dass Sie f nicht verwenden können, um Hinweise zu aktivieren.

Dies funktioniert seit dem Commit adce73cb68f7ca3e3e01ca6fbb08a1008c9c8b90 (2016/04/05).

Übrigens, könnten Sie weitere Hinweise geben und wir können solche Konflikte lösen.

Ich bin selbst kein vimium-Benutzer, daher werde ich es morgen installieren und versuchen, einen konkreteren Fehlerbericht für Sie zu erstellen. Danke für den Ausschnitt.

Tatsächlich können wir laut Tests in https://jsfiddle.net/2L36ypys/1/ eine solche Nachricht von der "Host" -Umgebung versenden, wenn die Seite "loading" , weil Vimium seine unload installiert

Aber mein Vimium++ verwendet diesen Listener nicht und es gibt keine einfache Methode, ihn durch

Also erwarte ich Ihre Recherchen. Eine Testseite, auf der Sie Fehler reproduzieren können, ist nur OKay. Danke vielmals.

In diesem Zusammenhang gibt es ein 2 Jahre altes Projekt, um zu erkennen, ob der Benutzer Vimium verwendet, könnte hier nützlich sein: https://github.com/EvanHahn/Detect-Vimium

@pimlottc Die Erweiterung hat 1 oder 2 Jahre lang nicht funktioniert, weil Vimium 'shadowDOM' verwendet, um seine Knoten zu verbergen.

Ich konnte das Problem, das Vimium-Benutzer auf meiner Site haben, nicht genau reproduzieren (wahrscheinlich, weil ich Vim nicht persönlich benutze). Steht es noch auf dem Tisch, Elementen eine Art vimium-spezifische CSS-Klasse hinzuzufügen, um die Erweiterung aufzufordern, sie nicht zu erweitern?

Steht es noch auf dem Tisch, Elementen eine Art vimium-spezifische CSS-Klasse hinzuzufügen, um die Erweiterung aufzufordern, sie nicht zu erweitern?

Ich bin mir nicht sicher, ob das eine großartige Idee ist.

Es würde sicherlich zu Verwirrung bei den Benutzern führen, wenn Vimium auf einigen Sites überhaupt nicht funktionieren würde und Benutzer Vimium auf Ihrer Site bereits selbst deaktivieren können, siehe hier .

Wenn wir Ihre Idee weiterverfolgen würden, bräuchten wir wahrscheinlich auch einen Mechanismus, mit dem Benutzer Vimium wieder aktivieren können.

In Ordung. Gibt es eine Möglichkeit für uns, zumindest zu wissen, ob Vimium aktiviert wurde? Das Problem ist, dass Benutzer uns die Schuld geben, wenn etwas aufgrund einer seltsamen Interaktion kaputt geht. Mein Dienst verwendet bereits eine sehr komplizierte Bearbeitungsoberfläche (CodeMirror), daher möchte ich etwas tun können.

Wenn Vimium könnte zumindest ein Artefakt auf dem DOM in irgendeiner Weise hinzufügen, zumindest Websites wie @vincentwoo ‚s mit Bezug auf sein könnte _made aware_ der Benutzer Vimium installiert und sie eine Nachricht an den Benutzer zeigen konnte sie dort zu erinnern könnten widersprüchliche Verhaltensweisen sein beim Kombinieren einer komplexen Benutzeroberfläche auf der Webseite mit allen Vimium-Angeboten oder bieten Sie sogar Hilfe bei der Konfiguration der betreffenden App oder Vimium an, um sie zu lösen.

Wenn Vimium dem DOM zumindest irgendwie ein Artefakt hinzufügen könnte...

Wir laden die Vomnibar auf jeder (obersten) Seite vor. Wir könnten ihm eine geeignete Klasse oder ID zuweisen, denke ich.

Das würde sicherlich helfen!

@smblott-github Meine Idee ist, dass Vimium seinen Shadow-Host-Knoten von <div> in einen anderen Namen umbenennt, wie <vimium-ui> , und dann reicht es gerade aus, die Kinder von <html> zu durchsuchen für diesen Tag-Namen. Ich denke, dass dieser Tag-Name für benutzerdefinierte Elemente nicht mit dem anderer Websites identisch ist.

Meine Idee ist, dass Vimium seinen Shadow-Host-Knoten von <div> in einen anderen Namen umbenennt, wie <vimium-ui> , und dann reicht es gerade aus, die Kinder von <html> nach diesem Tag-Namen zu durchsuchen .

Dies ist derzeit aufgrund dieses Chromium-Problems nicht möglich.

Sie konnten unsere über das Internet zugänglichen Ressourcen erkennen. Zum Beispiel:

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 Ich möchte kein "benutzerdefiniertes" Element erstellen, sondern nur ein HTMLElement mit einem benutzerdefinierten Tag-Namen. Ein HTMLElement Knoten ist genau wie ein HTMLUnknownElement HTMLElement Knoten, unterstützt aber immer noch das Anhängen eines ShadowRoot.

Nur ein paar Gedanken.

Sollten Webmaster eine Möglichkeit haben, Vimium zu deaktivieren?

  • Vorteile: Sie können Vimium automatisch deaktivieren, damit Benutzer ihre Apps sofort verwenden können
  • Nachteile: Benutzer werden verwirrt sein, wenn Verknüpfungen plötzlich nicht funktionieren. Dies kann abgeschwächt werden, indem die Benutzer darüber informiert werden, dass Vimium deaktiviert ist

Sollten Websitebesitzer eine Möglichkeit haben, Vimium zu erkennen?

  • Vorteile: Sie können Benutzer auffordern, zu erklären, dass Vimium die normale Funktionalität beeinträchtigen könnte
  • Nachteile: Dies erleichtert das Abnehmen von Fingerabdrücken (aber dies könnte bereits eine verlorene Sache sein)

Ich bin mir nicht sicher, ob Webmaster über eine der beiden Fähigkeiten verfügen sollten, aber wenn sie dies tun, sollte es sich wahrscheinlich nicht auf zufällige Implementierungsdetails verlassen. Eine standardisierte Lösung wie #2532 könnte der richtige Weg sein.

Eine Seite kann beispielsweise Folgendes enthalten:

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

Damit kann der Webmaster

  • Vimium erkennen
  • Vimium deaktivieren

Vimium müsste

  • Lassen Sie den Benutzer konfigurieren, ob

    1. Ignoriere das Tag (damit die Seite denkt, dass Vimium nicht installiert ist)

    2. Deaktiviere Vimium basierend auf der Deaktivierungseigenschaft von Meta

  • nach einem Meta-Tag suchen und ein Erkennungsereignis an dieses senden
  • den Benutzer darüber informieren, dass die Seite Vimium deaktiviert

Theoretisch können auch andere Keybinding-Erweiterungen diese Schnittstelle implementieren, sodass Webmaster Vimium, cVim, Surfing Keys, Saka Key, VimFx, Vimari usw. nicht separat erkennen müssen.

Ich suche auch nach einer Lösung, um Vimium zu erkennen. Der Vorschlag von @gdh1995 zu , ein <div> mit einer eigenartigen ID/Klassenname wird das Problem vorerst sofort lösen.

Ab vimium v1.59 ist unten eine funktionierende Funktion, die jedoch aufgrund des Fehlens einer zuverlässigen Kennung nicht ganz zuverlässig ist. Wenn Sie andere Erweiterungen haben, die shadowDom so einfügen, wie es vimium tut, wird es kaputt gehen.

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

Ich möchte nur sagen, dass ich mir Sorgen machen würde, wenn ein eingebauter Erkennungsmechanismus implementiert würde. Fingerabdrücke können natürlich immer mit Plugins durchgeführt werden, die DOM ändern, es sei denn, man würde Website-Javascript verbieten, aber geben wir den Leuten zumindest kein einfaches Datenpunkt-Ziel zum Nachverfolgen...

Wir könnten einen Mechanismus haben, bei dem wir Vimium nicht erkennen, aber beispielsweise ein Meta-Tag auf unserer Seite hinzufügen, das eine Nachricht anzeigt, die nur für den Fall angezeigt wird, dass ein Vimium-Benutzer die Seite verwendet, mit der Option zum Deaktivieren. Vimium kann somit eine triviale Erkennung vermeiden und wir erfahren nicht unbedingt etwas über den Benutzer.

Dies ist für die Anwendung, an der ich arbeite, aufgrund von Fehlern wie https://github.com/philc/vimium/issues/2504 durchaus notwendig. Zusammenfassend lässt sich sagen, dass die Website mit dem Ausführen von vimium reaktionsschnell beginnt und immer langsamer wird, wenn sich die Ereignishandler stapeln.

Es wäre schön, wenn Websites Folgendes erkennen könnten:

  1. Welche Vimium-Version wird verwendet
  2. Ob vimium aktiviert / deaktiviert / teilweise deaktiviert ist (und welche Tasten).

Und es wäre schön, wenn die Website Vimium höflich und für die Benutzer klar deaktivieren könnte (so dass das Vimium-Symbol nicht mehr blau ist).

@mgsloan Können Sie bitte eine Beispielseite bereitstellen? Die Handhabung des Einfügemodus hat sich seit #2504 grundlegend geändert.

(Ich bin mir nicht sicher, ob Websites Vimium einseitig deaktivieren. Das könnte ziemlich verwirrend sein.)

@smblott-github Hallo, danke für die Antwort! Das Leistungsproblem scheint tatsächlich weg zu sein. Groß!

Es gibt ein Problem, bei dem einige Eingaben ein bisschen anders sind, als wenn vimium deaktiviert ist. Ich werde nachfragen und sehen, ob wir die URL teilen können.

Hi! Gibt es eine Vorstellung davon, welche Ansätze für die Projektbetreuer akzeptabel sein könnten? Wir wären bereit, dafür etwas Zeit zu spenden (ziemlich viele vimium-Benutzer verwenden CoderPad), möchten aber nicht auf die Zehen treten.

Ich denke, der Kernpunkt, den Vimium erwartet, ist, dass alle Benutzer es ohne Schmerzen oder Ärger verwenden.

Da Ihre Site einige spezielle Aktionen hat, die sich von Vimium unterscheiden, einschließlich Esc in Eingabefeldern, sollte Vimium es zulassen, <esc> auf seiner Optionsseite "auszuschließen"?

Wenn dies der Fall ist, können Ihre Benutzer es manuell konfigurieren und die Aktionen der Site wiederherstellen (derzeit scheint <esc> nicht ausgeschlossen werden zu können).

Aber ich mag die Idee nicht, dass Vimium sich selbst deaktiviert, wenn besondere Bedingungen erfüllt sind. Es schadet dem Wert von Vimium.

Was die Veröffentlichung der Version von Vimium betrifft, empfehle ich:

  • ein über das Internet zugänglicher Ressourcenpfad, der die Versionszeichenfolge von Vimium enthält

    • korrekter, aber nicht geeignet für verschiedene Varianten von Vimium

    • zum Beispiel erstelle ich ein "Vimium C" und es hat eine andere Erweiterungs-ID und somit andere Ressourcen-URLs)

  • oder ein spezielles <meta> Tag, das von Vimium erstellt wurde und einige Wörter wie "Vimium" enthält

    • leichter zu überprüfen, kann aber durch Malware missbraucht werden

Das Überprüfen des div der obersten Ebene scheint nicht mehr zu funktionieren, da es nicht mehr gemountet wird, bis der Benutzer etwas tut.

Mit anderen Worten, beim Laden der Seite gibt es kein Artefakt, auf das man sich verlassen kann

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen